我正在尝试使用 tutorial by Bill Reiss 在 C# 中反序列化给定的 JSON 文件.对于非列表中的 XML 数据,此方法效果很好,但我想反序列化具有以下结构的 JSON 文件:
public class Data
{
public string Att1 { get; set; }
public string Att2 { get; set; }
public string Att3 { get; set; }
public string Att4 { get; set; }
}
public class RootObject
{
public List<Data> Listname { get; set; }
}
我的问题是使用 JSON.Net 的功能创建/将数据放入列表,然后在 XAML 页面上显示列表。到目前为止我的想法(这是行不通的):
var resp = await client.DoRequestJsonAsync<DATACLASS>("URL");
string t = resp.ToString();
var _result = Newtonsoft.Json.JsonConvert.DeserializeObject<List<DATACLASS>>(t);
XAMLELEMENT.ItemsSource = _result;
最佳答案
所以我认为您可能正在尝试反序列化为错误的类型。如果您将它序列化为 RootObject 并尝试反序列化为 List,它将失败。
查看示例代码
public void TestMethod1()
{
var items = new List<Item>
{
new Item { Att1 = "ABC", Att2 = "123" },
new Item { Att1 = "EFG", Att2 = "456" },
new Item { Att1 = "HIJ", Att2 = "789" }
};
var root = new Root() { Items = items };
var itemsSerialized = JsonConvert.SerializeObject(items);
var rootSerialized = JsonConvert.SerializeObject(root);
//This works
var deserializedItemsFromItems = JsonConvert.DeserializeObject<List<Item>>(itemsSerialized);
//This works
var deserializedRootFromRoot = JsonConvert.DeserializeObject<Root>(rootSerialized);
//This will fail. YOu serialized it as root and tried to deserialize as List<Item>
var deserializedItemsFromRoot = JsonConvert.DeserializeObject<List<Item>>(rootSerialized);
//This will fail also for the same reason
var deserializedRootFromItems = JsonConvert.DeserializeObject<Root>(itemsSerialized);
}
class Root
{
public IEnumerable<Item> Items { get; set; }
}
class Item
{
public string Att1 { get; set; }
public string Att2 { get; set; }
}
编辑:添加了完整的代码。
关于c# - 将 JSON 对象反序列化为 C# 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16019729/