2

HttpWebResponseからの着信JSONを解析するために、オープンソースやJson.NETなどのサードパーティライブラリに依存しないようにしています。なんで?実装を支援するためにオープンソースフレームワークに依存するほど、アプリはそれらの依存関係に依存する必要があります...可能であれば、多くの理由でアプリが多くのライブラリに依存することは好きではありません。MSでサポートされているため、Enterprise Libraryのようなものを使用しても問題ありませんが、より多くのオープンソースライブラリを使用しています。

とにかく、私は.NET3.5で着信JSONサーバー側を解析するための最良の方法を見つけようとしています。

これにより多くの応答が得られることはわかっており、.NET 3.5 JavaScriptSerializerを使用してデータをJSONにシリアル化したこともありますが、今度は、逆のことを行わずに、逆を行うための最良かつ最も簡単な方法を見つけようとしています。これを支援するためにサードパーティ/オープンソースフレームワークを使用する。

4

1 に答える 1

10

Microsoftが推奨するJSONシリアライザーは次のとおりです。DataContractJsonSerializerこのクラスはSystem.Runtime.Serializationアセンブリ内に存在します

このサンプルは、JSONデータからオブジェクトへの逆シリアル化を示しています。

MemoryStream stream1 = new MemoryStream();     
Person p2 = (Person)ser.ReadObject(stream1);

PersonタイプのインスタンスをJSONにシリアル化するには、最初にDataContractJsonSerializerを作成し、WriteObjectメソッドを使用してJSONデータをストリームに書き込みます。

Person p = new Person();
//Set up Person object...
MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
ser.WriteObject(stream1, p);

更新:ヘルパークラスを追加

単純なTo/FromJsonシリアル化に使用できるサンプルヘルパークラスを次に示します。

public static class JsonHelper
{
    public static string ToJson<T>(T instance)
    {
        var serializer = new DataContractJsonSerializer(typeof(T));
        using (var tempStream = new MemoryStream())
        {
            serializer.WriteObject(tempStream, instance);
            return Encoding.Default.GetString(tempStream.ToArray());
        }
    }

    public static T FromJson<T>(string json)
    {
        var serializer = new DataContractJsonSerializer(typeof(T));
        using (var tempStream = new MemoryStream(Encoding.Unicode.GetBytes(json)))
        {
            return (T)serializer.ReadObject(tempStream);
        }
    }
}
于 2010-08-02T20:10:20.113 に答える