2009-04-22 4 views

ответ

7

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

+2

Я посмотрел на него. Кажется, что это слишком предприятие для сравнения с System.Json. Я в основном стараюсь использовать Json для сериализации и десериализации списков неявных структур данных (кортежи и т. Д.). Я уже работаю в основном с динамическими данными, поэтому его способность сериализовывать сильно типизированные объекты не совсем то, чем я в восторге, а другой метод слишком многословный. – Patrick

+2

Он выполняет динамические данные так же, как System.Json, а также сериализует/десериализует: JObject o = JObject.Parse ("{'first_name': 'Jeff', 'age': 30}"); Console.WriteLine (o ["first_name"]); –

+0

Это лучше. Мне очень нравились неявные операторы класса JsonValue. Я могу просто дать ему шанс. – Patrick

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;} 
} 
0

Вот метод 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.

16

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

Пакет 'System.Json' был снят с производства. Вы можете найти соответствующие классы в самой структуре. –

+0

Владелец заблокировал этот пакет :( – Tito

+0

@PatrickHofman: В какой версии вы имеете в виду? Последний почти стабильный выпуск был https://www.nuget.org/packages/System.Json, но теперь они также устарели. – Sebastian

0

другой опция должна использовать реализацию Mono System.Json, Мне удалось выполнить резервное копирование на C# 2.0 с несколькими незначительными изменениями.

https://github.com/mono/mono/tree/master/mcs/class/System.Json/System.Json

https://github.com/mono/mono/blob/master/mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/JavaScriptReader.cs

Смежные вопросы