Используете System.Json для не-Silverlight проектов?
Есть идеи, как это сделать? Если это невозможно, что такое хорошая библиотека JSON для C#?
6 ответов
Json.NET - это отличная библиотека.NET json. Поддерживает LINQ, чтение / запись и преобразование объектов в и из json.
System.Json
теперь доступен в не-Silverlight проектах через NuGet (система управления пакетами.Net) и, как мы надеемся, будет выпущен как часть базовой инфраструктуры в vnext. Пакет NuGet называется JsonValue.
Представьте, что у нас есть следующий JSON в строковой переменной json
:
[{"a":"foo","b":"bar"},{"a":"another foo","b":"another bar"}]
Мы можем получить запись значения "другая панель" в консоль, используя следующий код:
using System.Json;
dynamic jsonObj = JsonValue.Parse(json);
var node = jsonObj[1].b;
System.Console.WriteLine(node.Value);
Другой вариант - использовать реализацию Mono System.Json, я смог перенести ее в C# 2.0 с небольшими изменениями.
Вы можете просто скачать мой проект C# 2.0 отсюда.
Скотт Гатри написал об этом в блоге
Если вы просто ищете кодировку / декодирование JSON, то есть официальная библиотека расширений System.Web от Microsoft, которая делает это, скорее всего, у вас уже есть эта сборка (System.Web.Extensions):
http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx
Пример:
using System;
using System.Web.Script.Serialization;
class App
{
static void Main(string[] args = null)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
String sJson = "{\"Name\": \"Your name\"}";
DesJson json = jss.Deserialize<DesJson>(sJson);
Console.WriteLine(json.Name);
}
}
class DesJson {
public string Name {get; set;}
}
Вот метод расширения для сериализации любого экземпляра объекта в JSON:
public static class GenericExtensions
{
public static string ToJsonString<T>(this T input)
{
string json;
DataContractJsonSerializer ser = new DataContractJsonSerializer(input.GetType());
using (MemoryStream ms = new MemoryStream())
{
ser.WriteObject(ms, input);
json = Encoding.Default.GetString(ms.ToArray());
}
return json;
}
}
Вам нужно добавить ссылку на System.ServiceModel.Web, чтобы использовать DataContractSerializer.