servicestack-text,C#,servicestack Text" /> servicestack-text,C#,servicestack Text" />

C# ServiceStack.Text DynamicJson无法分析数组

C# ServiceStack.Text DynamicJson无法分析数组,c#,servicestack-text,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);

运行以下代码:

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
返回一个
字符串。这意味着我无法遍历其中的对象列表

我错过了什么

编辑

我想我已经找到了问题所在。查看github中的
Pcl.Dynamic.cs
方法
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

我认为这是一个bug。因此我在代码中进行了修复并提交了一个拉取请求。如果有人好奇:


这确实是一个bug,已被ServiceStack.Text的源代码所接受


您是否尝试将任何内容放入数组中以查看其反序列化方式?如果它为空,则不知道它要保存的类型。您也可以创建自己的类,表示json保存的相同格式,然后反序列化为该类型。这比使用
dynamic
s要好得多。@DLeh我可以,但这不是case、 我特别想把它解析成一个动态对象…我使用了替代方法,我知道它们是有效的。我将数据放入数组中,结果是一样的。好的。那么你需要做好准备,它可能不会总是按照你想要的类型进行解析。#动态