2010-02-05 3 views
3

Какие библиотеки доступны для обработки JSON в .Net? Я видел это: http://james.newtonking.com/projects/json-net.aspx, но предпочел бы родную библиотеку, если это было возможно.Использование JSON в .Net

+1

Что вы подразумеваете под «родной» библиотекой? Имена методов, написанные на каком-то местном языке вместо английского? –

+0

@Mehrdad: Он означает, что он написан полностью на платформе .NET, который не полагается на вызовы API. –

+1

Если это то, что означает «родной», что случилось с JSON.NET? –

ответ

0

Если вы можете потребовать .Net 3.5, используйте System.Web.Script.Serialization.JavaScriptSerializer

+0

Спасибо, Фрэнк. Я займусь этим. – sKIPper76

2

Я использую JavaScriptSerializer некоторые разоблачить структуры данных от службы WCF в Ajax звонки, и это работает довольно неплохо.

1

JavaScriptSerializer был отмечен как устаревший в .NET 3.5 и , но вы можете использовать DataContractJsonSerializer.

EDIT: см. this question on SO о том, действительно ли JavaScriptSerializer является устаревшим в будущем в BC BCL. Похоже, что JavaScriptSerializer больше не устарел в .NET 3.5 SP1 - так что, вероятно, это хорошо использовать. Если есть сомнения, вы можете использовать сериализатор контрактов из WCF или JSON.NET (если вы хотите включить сторонний код).

Вот код оболочки, который можно использовать с помощью DataContractJsonSerializer.

using System.Runtime.Serialization; 
using System.Runtime.Serialization.Json; 

public class JSONHelper 
{ 
    public static string Serialize<T>(T obj) 
    { 
     DataContractJsonSerializer serializer = 
       new DataContractJsonSerializer(obj.GetType()); 
     using(MemoryStream ms = new MemoryStream()) 
     { 
      serializer.WriteObject(ms, obj); 
      string retVal = Encoding.Default.GetString(ms.ToArray()); 
      return retVal; 
     } 
    } 

    public static T Deserialize<T>(string json) 
    { 
     using(MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) 
     { 
      DataContractJsonSerializer serializer = 
        new DataContractJsonSerializer(typeof(T)); 
      T obj = (T)serializer.ReadObject(ms); 
      ms.Close(); 
      return obj; 
     } 
    } 
} 

Код выше любезно: http://pietschsoft.com/post/2008/02/NET-35-JSON-Serialization-using-the-DataContractJsonSerializer.aspx,

я изменил его от его первоначальной формы использовать лучшие методы для удаления объекта (using модели .NET поддерживает).

+1

-1 для того, чтобы не обтекать потоки в блоках 'using', а для создания экземпляра, который вы позже перезаписываете в десериализации. –

+0

Хороший улов, Джон. Согласны ли вы об использовании этого класса? –

+0

@ Джон Сандерс: Справедливый пинг. Я исправил это, хотя я скажу, что я не являюсь автором этого кода. Хотя я и изменил его в своей адаптированной реализации. Было проще найти сайт, чем мой код :) – LBushkin

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