2013-08-13 2 views
0

Может быть, я делаю это не так, но у меня есть следующий тест, который неисправный:JsonSerializer.DeserializeFromString В противном случае на Субе объектов

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

Является ли это ошибка в стеке службы? Или недоразумение с моей стороны? Если это недоразумение, то как я буду делать то, что я делаю правильно?

ответ

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 для получения внутренних объектов/массивов.

Смежные вопросы