5

Jsonが初めてなので、少し緑色です。

JSON文字列を返すRestベースのサービスがあります。

{"treeNode":[{"id":"U-2905","pid":"R","userId":"2905"},
{"id":"U-2905","pid":"R","userId":"2905"}]}

私はJson.netで遊んでいて、文字列をオブジェクトなどに逆シリアル化しようとしています。私は助けるために拡張メソッドを書きました。

public static T DeserializeFromJSON<T>(this Stream jsonStream, Type objectType)
        {
            T result;

            using (StreamReader reader = new StreamReader(jsonStream))
            {
                JsonSerializer serializer = new JsonSerializer();
                try
                {
                    result = (T)serializer.Deserialize(reader, objectType);
                }
                catch (Exception e)
                {   
                    throw;
                }

            }
            return result;
        }

treeNode[] オブジェクトの配列を期待していました。しかし、別のオブジェクトの treeNode[] プロパティの場合にのみ正しく逆シリアル化できるようです。

public class treeNode
{
    public string id { get; set; }
    public string pid { get; set; }
    public string userId { get; set; }
}

逆シリアル化からストレート配列を取得する方法はありますか?

乾杯

4

2 に答える 2

3

匿名クラスを使用できます。

T DeserializeJson<T>(string s, T templateObj) {
    return JsonConvert.Deserialize<T>(s);
}

そして、あなたのコードで:

return DeserializeJson(jsonString, new { treeNode = new MyObject[0] }).treeNode;
于 2009-09-04T10:30:57.593 に答える
0

残念ながら、JSONはシリアル化中の型情報をサポートしていません。完全なクラスデータではなく、純粋なオブジェクトディクショナリです。適切な型マーシェルをサポートするには、JSONシリアライザーとデシリアライザーの動作を拡張するための何らかの拡張機能を作成する必要があります。

ルートタイプを指定すると、予期されるタイプが正確で派生タイプではない場合、オブジェクトグラフが正しくマップされます。

たとえば、基本クラスの配列としてプロパティがあり、実際の値に任意のタイプの派生子クラスを含めることができる場合です。JSONはそれを完全にはサポートしていませんが、Webサービス(SOAP)を使用すると、動的型付けを使用してオブジェクトをシリアル化できます。

于 2009-09-04T10:18:32.797 に答える