0

次のコードを実行します。

var s = @"{ ""simple"": ""value"", ""obj"": { ""val"":""test"" }, ""array"": []";
var dyn = DynamicJson.Deserialize(s);
Console.WriteLine(dyn.simple);
Console.WriteLine(dyn.obj);
Console.WriteLine(dyn.obj.val);
Console.WriteLine(dyn.array);

版画:

"value"
{"val":"test"}
base {System.Dynamic.DynamicObject}: {"val":"test"}
"test"
"[]"

つまりdyn.obj、オブジェクトを返すので、引き続きナビゲートできdyn.arrayますが、string. つまり、内部のオブジェクトのリストを反復処理できません。

私は何が欠けていますか?

編集

私は問題を見つけたと思います。Pcl.Dynamic.csメソッドで github を見るとYieldMember、次のことが行われます。

private bool YieldMember(string name, out object result)
{
    if (_hash.ContainsKey(name))
    {
        var json = _hash[name].ToString();
        if (json.TrimStart(' ').StartsWith("{", StringComparison.Ordinal))
        {
            result = Deserialize(json);
            return true;
        }
        result = json;
        return _hash[name] == result;
    }
    result = null;
    return false;
}

で始まる値を{逆シリアル化された (動的) オブジェクトに変換します。

@mythz が StackOverflow の質問を調べていることは知っています。jsonが[右で始まると、処理が非常に簡単に思えますか?

編集2

私はこれをバグと考えています。そのため、コードを修正し、プル リクエストを送信しました。誰かが興味を持っている場合:

https://github.com/ServiceStack/ServiceStack.Text/pull/442

4

1 に答える 1