7

私は以下のようなjsonを持っています:

  "[{"a":"b","c":"d"},{"a":"e","c":"f"},{"a":"g","c":"h"}]"

これを匿名型「foo」のオブジェクトのリストにデシリアライズしたい

  var foo=new { a=string.empty , c=string.empty };

コードは次のとおりです。

  ServiceStackJsonSerializer Jserializer = new ServiceStackJsonSerializer();
  dynamic foos = Jserializer.Deserialize<List<foo.GetType()>>(jsonString);

しかし、動作していません。

アップデート :

に置き換えServiceStackJavascriptSerializer渡すと、入力dictionary[]する必要なく問題が解決しましたanonymous

        JavaScriptSerializer jSerializer = new JavaScriptSerializer();
        var Foos = jSerializer.Deserialize<Dictionary<string, object>[]>(jsonString);
4

4 に答える 4

2

Jserializerどんなクラスかはわかりませんが、クラスは知っていJavaScriptSerializerます。残念ながら、匿名型への逆シリアル化はサポートされていません。次のような具象型を作成する必要があります。

class Foo
{
    public string a { get; set; }

    public string c { get; set; }
}

次のコードを使用するとうまくいきました:

const string json =
    @"[{""a"":""b"",""c"":""d""},{""a"":""e"",""c"":""f""},{""a"":""g"",""c"":""h""}]";

var foos = new JavaScriptSerializer().Deserialize<Foo[]>(json);

変数にはインスタンスfoosの配列が含まれます。Foo

于 2012-08-08T18:48:41.607 に答える
2

There are multiple ways you can dynamically parse JSON with ServiceStack's JsonSerializer e.g:

var json = "[{\"a\":\"b\",\"c\":\"d\"},{\"a\":\"e\",\"c\":\"f\"},{\"a\":\"g\",\"c\":\"h\"}]";

var dictionary = json.FromJson<List<Dictionary<string, string>>>();
".NET Collections:".Print();
dictionary.PrintDump();

List<JsonObject> map = JsonArrayObjects.Parse(json);
"Dynamically with JsonObject:".Print();
map.PrintDump();

Which uses ServiceStack's T.Dump() extension method to print out:

.NET Collections:
[
    {
        a: b,
        c: d
    },
    {
        a: e,
        c: f
    },
    {
        a: g,
        c: h
    }
]
Dynamically with JsonObject:
[
    {
        a: b,
        c: d
    },
    {
        a: e,
        c: f
    },
    {
        a: g,
        c: h
    }
]
于 2012-08-09T05:04:26.673 に答える
1

あなたがやろうとしていることは、json.netの方が適しているように聞こえます。この質問を参照してください Json.netを使用してjsonオブジェクトを動的オブジェクトに逆シリアル化します

于 2012-08-08T18:51:19.490 に答える