JSON字符串意外地作为列表反序列化为对象

时间:2014-03-21 15:13:50

标签: c# json servicestack deserialization json-deserialization

这个JSON:

{
    "Values": {
        "Category": "2",
        "Name": "Test",
        "Description": "Testing",
        "Expression": "[Total Items] * 100"
    }
}

正在使用JsConfig.ConvertObjectTypesIntoStringDictionary = true;

对此DTO进行反序列化
public class MyDto {
    public Dictionary<string, object> Values { get; set; }
}

出乎意料的是,Expression属性被反序列化为List<object>而不是string(参见屏幕截图)。

Screenshot

似乎解析器看到了开括号,并试图将该值解释为数组。是否有某种方法可以解决这个问题&#34;类型检测&#34;关闭或解决问题(不改变DTO)?

我正在使用ServiceStack v3.9.71。

1 个答案:

答案 0 :(得分:1)

Json.NET能够将您的示例JSON反序列化为DTO类的实例。您正在使用的JSON解析库似乎是错误的。你能切换吗?

internal class Program
{
    private static void Main()
    {
        const string json = @"{
""Values"": {
    ""Category"": ""2"",
    ""Name"": ""Test"",
    ""Description"": ""Testing"",
    ""Expression"": ""[Total Items] * 100""
    }
}";
        var myDto = JsonConvert.DeserializeObject<MyDto>(json);
    }
}
public class MyDto
{
    public Dictionary<string, object> Values
    {
        get;
        set;
    }
}

Json.NET works

编辑:

我将我的代码切换为使用NuGet的ServiceStack.Text,我能够使序列化完美地运行:

var myDto = JsonSerializer.DeserializeFromString<MyDto>(json);