简体   繁体   English

将JSON对象反序列化为C#列表

[英]Deserializing JSON object into a C# list

I'm trying to deserialize a given JSON file in C# using a tutorial by Bill Reiss . 我正在尝试使用Bill Reiss教程在C#中反序列化给定的JSON文件。 For XML data in a non-list this method works pretty well, though I would like to deserialize a JSON file with the following structure: 对于非列表中的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; }
}

My problem is with using JSON.Net's ability to create / put data into lists, and then displaying the list on an XAML page. 我的问题是使用JSON.Net创建/将数据放入列表,然后在XAML页面上显示列表的能力。 My idea so far (which is not working): 到目前为止我的想法(这是行不通的):

var resp = await client.DoRequestJsonAsync<DATACLASS>("URL");
string t = resp.ToString();
var _result = Newtonsoft.Json.JsonConvert.DeserializeObject<List<DATACLASS>>(t);
XAMLELEMENT.ItemsSource = _result;

So I think you're probably trying to deserialize to the wrong type. 所以我认为你可能试图反序列化为错误的类型。 If you serialized it to RootObject and try to deserialize to List it's going to fail. 如果您将它序列化为RootObject并尝试反序列化为List它将失败。

See this example code 请参阅此示例代码

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; }
}

Edit: Added complete code. 编辑:添加完整代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM