Я пытаюсь не зависеть от библиотек с открытым исходным кодом или сторонних библиотек, таких как Json.NET, для анализа входящего JSON из HttpWebResponse. Почему? Потому что чем больше вы полагаетесь на фреймворки с открытым исходным кодом для помощи в своих реализациях, тем больше ваше приложение должно полагаться на эти зависимости... Мне не нравится, чтобы мои приложения зависели от множества библиотек по многим причинам, если это вообще возможно. Я согласен использовать такие вещи, как Enterprise Library, потому что она поддерживается MS, но я беру больше библиотек с открытым исходным кодом.
В любом случае, я пытаюсь найти лучший способ анализа входящего JSON на стороне сервера в .NET 3.5.
Я знаю, что это вызовет много откликов, и я даже использовал .NET 3.5 JavaScriptSerializer для сериализации данных в JSON, но теперь я пытаюсь найти лучший и самый простой способ сделать обратное, не повторяя чтобы помочь в этом использовать стороннюю структуру / структуру с открытым исходным кодом.
Ответ 1 · рейтинг 10 · Wallace Breza
Рекомендуемый Microsoft сериализатор JSON: DataContractJsonSerializer Этот класс существует в сборке System.Runtime.Serialization.
В примере демонстрируется десериализация данных JSON в объект.
MemoryStream stream1 = new MemoryStream();
Person p2 = (Person)ser.ReadObject(stream1);
Чтобы сериализовать экземпляр типа Person в JSON, сначала создайте DataContractJsonSerializer и используйте метод WriteObject для записи данных JSON в поток.
Person p = new Person();
//Set up Person object...
MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
ser.WriteObject(stream1, p);
Обновление: добавлен вспомогательный класс
Вот пример вспомогательного класса, который можно использовать для простой сериализации To/From Json:
public static class JsonHelper
{
public static string ToJson<T>(T instance)
{
var serializer = new DataContractJsonSerializer(typeof(T));
using (var tempStream = new MemoryStream())
{
serializer.WriteObject(tempStream, instance);
return Encoding.Default.GetString(tempStream.ToArray());
}
}
public static T FromJson<T>(string json)
{
var serializer = new DataContractJsonSerializer(typeof(T));
using (var tempStream = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
return (T)serializer.ReadObject(tempStream);
}
}
}