ServiceStack.Text DynamicJson 无法解析数组
ServiceStack.Text DynamicJson fails to parse an array
运行以下代码:
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
returns 一个对象,因此我可以继续在其中导航,但是 dyn.array
returns 一个 string
。这意味着我不能遍历里面的对象列表。
我错过了什么?
编辑
我想我已经找到问题所在了。在 Pcl.Dynamic.cs
方法 YieldMember
中查看 github 执行以下操作:
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 会查看 Whosebug 中的问题,所以也许他可以发表自己的想法。当 json 以 [
开头时似乎很容易处理,对吗?
编辑 2
我认为这是一个错误。所以我在代码中进行了修复并提交了拉取请求。如果有人好奇:
这确实是一个错误,已被接受到 ServiceStack.Text 的源代码中。
https://github.com/ServiceStack/ServiceStack.Text/commit/7cd06d3e90bcbfd244af525ed7f584bd4badc31e
运行以下代码:
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
returns 一个对象,因此我可以继续在其中导航,但是 dyn.array
returns 一个 string
。这意味着我不能遍历里面的对象列表。
我错过了什么?
编辑
我想我已经找到问题所在了。在 Pcl.Dynamic.cs
方法 YieldMember
中查看 github 执行以下操作:
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 会查看 Whosebug 中的问题,所以也许他可以发表自己的想法。当 json 以 [
开头时似乎很容易处理,对吗?
编辑 2
我认为这是一个错误。所以我在代码中进行了修复并提交了拉取请求。如果有人好奇:
这确实是一个错误,已被接受到 ServiceStack.Text 的源代码中。
https://github.com/ServiceStack/ServiceStack.Text/commit/7cd06d3e90bcbfd244af525ed7f584bd4badc31e