ServiceStack.Text DynamicJson无法解析数组

时间:2015-04-01 13:44:22

标签: c# servicestack-text

运行以下代码:

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方法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在StackOverflow中查看问题,所以也许他可以用他的想法来表达。当json以[开始时,似乎很容易处理吗?

编辑2

我认为这是一个错误。所以我在代码中修改并提交了一个pull请求。万一有人好奇:

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

1 个答案:

答案 0 :(得分:2)

这确实是一个已经被ServiceStack.Text的源代码接受的错误。

https://github.com/ServiceStack/ServiceStack.Text/commit/7cd06d3e90bcbfd244af525ed7f584bd4badc31e