Используете 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.

Другие вопросы по тегам