JsonSerializer.DeserializeFromString在子对象上失败

时间:2013-08-13 20:49:14

标签: servicestack-text

也许我做错了,但我有以下测试失败:

[Test]
public void Can_Deserialize_List()
{
    string json = @"
    {
        ""a"": [
            {
                ""b"":1,
                ""c"":false
            },{
                ""b"":2,
                ""c"":true
            }
        ]
    }";

    JsonObject container = JsonSerializer.DeserializeFromString<JsonObject>(json);
    List<JsonObject> aList = JsonSerializer.DeserializeFromString<List<JsonObject>>(container["a"]);
    Assert.True(aList.Count == 2);
    Assert.True(aList[0]["b"] == "1");
    Assert.True(aList[0]["c"] == "false");
    Assert.True(aList[1]["b"] == "2");
    Assert.True(aList[1]["c"] == "true");
}

这是服务堆栈中的错误吗?或者是我的误会?如果这是一个误解,那么我将如何正确地做我正在做的事情?

1 个答案:

答案 0 :(得分:0)

我通过重写代码解决了这个问题:

[Test]
public void Can_Deserialize_List()
{
    string json = @"
    {
        ""a"": [
            {
                ""b"":1,
                ""c"":false
            },{
                ""b"":2,
                ""c"":true
            }
        ]
    }";

    JsonObject container = JsonObject.Parse(json);
    JsonArrayObjects aList = container.ArrayObjects("a");
    Assert.True(aList.Count == 2);
    Assert.True(aList[0]["b"] == "1");
    Assert.True(aList[0]["c"] == "false");
    Assert.True(aList[1]["b"] == "2");
    Assert.True(aList[1]["c"] == "true");
}

看起来JsonObject在内部使用JSV格式,你不应该期望字符串值是JSON格式。相反,您应该使用JsonObject.Object和JsonObject.ArrayObjects方法来获取内部对象/数组。