0

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

[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");
}

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

4

1 回答 1

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 方法来获取内部对象/数组。

于 2013-08-14T15:35:12.320 回答