2010-07-18 3 views
56

Gehört .NET 4 zu einer Klasse, die JSON-Daten serialisiert/deserialisiert?Hat .NET 4 einen integrierten JSON-Serializer/Deserializer?

  • Ich weiß, es gibt 3rd-Party-Bibliotheken, wie JSON.NET, aber ich bin auf der Suche nach rechts in die .NET gebaut etwas.

  • Ich habe Data Contracts auf MSDN gefunden, aber es ist für WCF, nicht für Winforms oder WPF.

+4

JSON.Net wird gut unterstützt und es scheint, dass Microsoft beabsichtigen adoptieren Sie es selbst * "Wir im Web-Team werden JSON.NET als Standard-JSON-Serializer in Web-API einfügen, wenn es veröffentlicht wird, so dass es nett sein wird." * von http://www.hanselman.com/blog/ OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx – Liam

+0

Beachten Sie die eingebettete Bibliothek für JSon Serialisierung ** Leistung ** in .Net! – Babak

+1

@Babak was meinst du hüte dich? Bitte erläutern. –

Antwort

37

Sie können die DataContractJsonSerializer Klasse verwenden, wo Sie wollen, es ist nur eine. NET-Klasse und ist nicht auf WCF beschränkt. Weitere Informationen zur Verwendung here und here.

+0

Danke, MSDN hat die DataContractJsonSerializer-Klasse in Assembly: System.Runtime.Serialization (in System.Runtime.Serialization.dll) angegeben. VS2010 zeigt jedoch Fehler an, kann DataContractJsonSerializer nicht finden. – Cheung

+0

@TatMing Das liegt daran, IIRC, vor .Net V4 befindet sich in System.ServiceModel.Web – Psytronic

+0

Finden Sie das ~ Es über Ziel Framework-Problem, siehe: http://StackOverflow.com/Questions/1825417/Where-is-System -servicemodel-web-dll – Cheung

27

Es gibt die JavaScriptSerializer Klasse (obwohl Sie die System.Web.Extensions Montage der Klasse arbeitet völlig in Ordnung in WinForms/WPF-Anwendungen verweisen müssen). Auch wenn die Klasse DataContractJsonSerializer für WCF entwickelt wurde, funktioniert sie in Client-Anwendungen einwandfrei.

+5

FYI: Vergleich zwischen JsonSerializer und JavaScriptSerializer finden Sie [http://stackoverflow.com/questions/9301878/whats-the-difference-between-datacontractjsonserializer-and-javascriptserialize] (hier). – LosManos

+0

JavaScriptSerializer ist auch im Namespace System.Web.Script.Serialization.JavaScriptSerializer für diejenigen versteckt, die danach suchen. – Brain2000

0

Verwenden Sie diese generische Klasse, um JSON serialisieren/deserialisieren zu können. Sie können leicht komplexe Datenstruktur wie folgt serialisiert:

Dictionary<string, Tuple<int, int[], bool, string>> 

zu JSON-String und dann in Anwendung Einstellung zu speichern oder sonst

public class JsonSerializer 
{ 
    public string Serialize<T>(T aObject) where T : new() 
    { 
     T serializedObj = new T(); 
     MemoryStream ms = new MemoryStream(); 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); 
     ser.WriteObject(ms, serializedObj); 
     byte[] json = ms.ToArray(); 
     ms.Close(); 
     return Encoding.UTF8.GetString(json, 0, json.Length); 
    } 

    public T Deserialize<T>(string aJSON) where T : new() 
    { 
     T deserializedObj = new T(); 
     MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(aJSON)); 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(aJSON.GetType()); 
     deserializedObj = (T)ser.ReadObject(ms); 
     ms.Close(); 
     return deserializedObj; 
    } 
} 
Verwandte Themen