Использование System.Json для проектов, отличных от Silverlight?

Любая идея о том, как это сделать? Если это невозможно, то какая хорошая библиотека JSON для С#?

Ответ 1

Json.NET - отличная библиотека .NET json. Поддерживает LINQ, чтение/запись и преобразование объектов в json и из него.

Ответ 2

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);

Ответ 3

Если вы просто ищете кодирование/декодирование 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;}
}

Ответ 4

Здесь используется метод extenstion для сериализации любого экземпляра объекта в 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.