Я просто использовал XmlWriter для создания некоторого XML для отправки обратно в HTTP-ответе. Как бы вы создали строку JSON. Я предполагаю, что вы просто используете строковый конструктор для создания строки JSON, и они отформатируют ваш ответ как JSON?
Как создать строку JSON в С#
Ответ 1
Вы можете использовать класс JavaScriptSerializer, проверьте эту статью для создания полезного метода расширения.
Код из статьи:
namespace ExtensionMethods
{
public static class JSONHelper
{
public static string ToJSON(this object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(obj);
}
public static string ToJSON(this object obj, int recursionDepth)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RecursionLimit = recursionDepth;
return serializer.Serialize(obj);
}
}
}
Использование:
using ExtensionMethods;
...
List<Person> people = new List<Person>{
new Person{ID = 1, FirstName = "Scott", LastName = "Gurthie"},
new Person{ID = 2, FirstName = "Bill", LastName = "Gates"}
};
string jsonString = people.ToJSON();
Ответ 2
Использование Newtonsoft.Json делает это действительно проще:
Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };
string json = JsonConvert.SerializeObject(product);
Документация: Сериализация и десериализация JSON
Ответ 3
Эта библиотека очень хороша для JSON из С#
Ответ 4
Этот фрагмент кода использует DataContractJsonSerializer из System.Runtime.Serialization.Json в .NET 3.5.
public static string ToJson<T>(/* this */ T value, Encoding encoding)
{
var serializer = new DataContractJsonSerializer(typeof(T));
using (var stream = new MemoryStream())
{
using (var writer = JsonReaderWriterFactory.CreateJsonWriter(stream, encoding))
{
serializer.WriteObject(writer, value);
}
return encoding.GetString(stream.ToArray());
}
}
Ответ 5
Посмотрите http://www.codeplex.com/json/ для проекта json-net.aspx. Зачем изобретать колесо?
Ответ 6
Вы также можете попробовать мой ServiceStack JsonSerializer его самый быстрый .NET JSON сериализатор. Он поддерживает сериализацию DataContracts, любой тип POCO, интерфейсы, объекты с ограниченной привязкой, включая анонимные типы и т.д.
Основной пример
var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = JsonSerializer.SerializeToString(customer);
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json);
Примечание. Используйте только сценарий JavaScriptSerializer от Microsoft, если производительность для вас не важна, так как мне пришлось оставить его вне моих тестов, так как он до 40x-100x медленнее, чем другие сериализаторы JSON.
Ответ 7
Если вы не можете или не хотите использовать два встроенных сериализатора JSON (JavaScriptSerializer и DataContractJsonSerializer) вы можете попробовать библиотеку JsonExSerializer - я использую ее в ряде проектов и работает достаточно хорошо.
Ответ 8
Если вам нужен сложный результат (встроенный), создайте свою собственную структуру:
class templateRequest
{
public String[] registration_ids;
public Data data;
public class Data
{
public String message;
public String tickerText;
public String contentTitle;
public Data(String message, String tickerText, string contentTitle)
{
this.message = message;
this.tickerText = tickerText;
this.contentTitle = contentTitle;
}
};
}
а затем вы можете получить строку JSON с вызовом
List<String> ids = new List<string>() { "id1", "id2" };
templateRequest request = new templeteRequest();
request.registration_ids = ids.ToArray();
request.data = new templateRequest.Data("Your message", "Your ticker", "Your content");
string json = new JavaScriptSerializer().Serialize(request);
Результат будет таким:
json = "{\"registration_ids\":[\"id1\",\"id2\"],\"data\":{\"message\":\"Your message\",\"tickerText\":\"Your ticket\",\"contentTitle\":\"Your content\"}}"
Надеюсь, что это поможет!
Ответ 9
Если вы пытаетесь создать веб-службу для передачи данных через JSON на веб-страницу, рассмотрите возможность использования инструментария AJAX для ASP.NET:
http://www.asp.net/learn/ajax/tutorial-05-cs.aspx
Он автоматически преобразует ваши объекты, обслуживаемые через webservice, в json и создаст прокси-класс, который вы можете использовать для подключения к нему.
Ответ 10
DataContractJSONSerializer сделает все для вас так же легко, как XMLSerializer. Его тривиально использовать в веб-приложении. Если вы используете WCF, вы можете указать его использование с атрибутом. Семейство DataContractSerializer также очень быстро.
Ответ 11
Я обнаружил, что вам не нужен сериализатор. Если вы вернете объект в виде списка. Позвольте мне использовать пример.
В нашем asmx мы получаем данные, используя переменную, которую мы прошли вдоль
// return data
[WebMethod(CacheDuration = 180)]
public List<latlon> GetData(int id)
{
var data = from p in db.property
where p.id == id
select new latlon
{
lat = p.lat,
lon = p.lon
};
return data.ToList();
}
public class latlon
{
public string lat { get; set; }
public string lon { get; set; }
}
Затем, используя jquery, мы обращаемся к службе, проходя через эту переменную.
// get latlon
function getlatlon(propertyid) {
var mydata;
$.ajax({
url: "getData.asmx/GetLatLon",
type: "POST",
data: "{'id': '" + propertyid + "'}",
async: false,
contentType: "application/json;",
dataType: "json",
success: function (data, textStatus, jqXHR) { //
mydata = data;
},
error: function (xmlHttpRequest, textStatus, errorThrown) {
console.log(xmlHttpRequest.responseText);
console.log(textStatus);
console.log(errorThrown);
}
});
return mydata;
}
// call the function with your data
latlondata = getlatlon(id);
И мы получаем ответ.
{"d":[{"__type":"MapData+latlon","lat":"40.7031420","lon":"-80.6047970}]}
Ответ 12
Использовать кодировку
Простой объект для JSON Array EncodeJsObjectArray()
public class dummyObject
{
public string fake { get; set; }
public int id { get; set; }
public dummyObject()
{
fake = "dummy";
id = 5;
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append('[');
sb.Append(id);
sb.Append(',');
sb.Append(JSONEncoders.EncodeJsString(fake));
sb.Append(']');
return sb.ToString();
}
}
dummyObject[] dummys = new dummyObject[2];
dummys[0] = new dummyObject();
dummys[1] = new dummyObject();
dummys[0].fake = "mike";
dummys[0].id = 29;
string result = JSONEncoders.EncodeJsObjectArray(dummys);
Результат: [[29, "Mike" ], [5, "dummy"]]
Pretty Usage
Довольно печать JSON Array PrettyPrintJson() метод расширения строки
string input = "[14,4,[14,\"data\"],[[5,\"10.186.122.15\"],[6,\"10.186.122.16\"]]]";
string result = input.PrettyPrintJson();
Результаты:
[
14,
4,
[
14,
"data"
],
[
[
5,
"10.186.122.15"
],
[
6,
"10.186.122.16"
]
]
]