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