c# - 如何将 JSON 反序列化到这个 POCO 类中?

标签 c# json serialization

错误:

无法将类型“UserItem”隐式转换为“RootObject”

如何将 JSON 反序列化到这个 POCO 类中?

我只是想将 json 数据反序列化为 C# 自定义 poco 类,如下所示,这是我到目前为止所做的;

public static UserItem DownloadJSONString(string urlJson)
{
    using (WebClient wc = new WebClient())
    {
        var json = wc.DownloadString(urlJson);
        UserItem userItems = JsonConvert.DeserializeObject<RootObject>(json);

        return userItems;
    }            
}

我有点困在这里

这里是我的 Json:

{
    "meta":
    {
        "status":200,
        "resultSet":
        {
            "id":"05"
        },
        "pagination":
        {
            "count":2,
            "pageNum":1,
            "pageSize":2
        }
    },
    "results":   
    {
        "id":0,
        "name":
        "title",
        "items":
        [
            {
                "id":0,
                "name":"English",
                "title":"English",
            },
            {
                "id":0,
                "name":"Spanish",
                "title":"Spanish;",
            }
        ]
    }
}

这是我的 json 对象(从 json 生成到 c# 类)

public class ResultSet
{
    public string id { get; set; }
}

public class Pagination
{
    public int count { get; set; }
    public int pageNum { get; set; }
    public int pageSize { get; set; }
}

public class Meta
{
    public int status { get; set; }
    public ResultSet resultSet { get; set; }
    public Pagination pagination { get; set; }
}

public class Item
{
    public int id { get; set; }
    public string name { get; set; }
    public string title { get; set; }
}

public class Results
{
    public int id { get; set; }
    public string name { get; set; }
    public List<Item> items { get; set; }
}

public class RootObject
{
    public Meta meta { get; set; }
    public Results results { get; set; }
}

这是我的简单 UserItem POCO 类

public class UserItem 
{
    public int id { get; set; }
    public string name { get; set; }
    public string title { get; set; }
}

最佳答案

给你:

var root = JsonConvert.DeserializeObject<RootObject>(json);
var userItem = root.results.items
                           .Select(i => new UserItem
                           {
                               id = i.id,
                               name = i.name,
                               title = i.title
                           }).FirstOrDefault();

return userItem;

如您所知,您不能只将 Item 类转换为 UserItem,但您可以构建一个。这里要注意的一件事是,很明显,如果您只想退回一个,则只需要拿一个。在这里,我捕获了第一个或默认值。例如,如果列表为空,则默认值为 null

关于c# - 如何将 JSON 反序列化到这个 POCO 类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20110468/

相关文章:

c++ - 通过取消引用的基类指针 boost 序列化

c# - 检查 DateTimePicker 日历是否下拉

c# - 我怎样才能在 C# 中获得真正的操作系统版本?

python - 通过 key 链接的两个JSON文档

json - 通过 Postman 使用 PUT 请求更新 Contentful 帖子

jquery - $(form).serialize() 文件字段的解决方法

c# - 使用 SendMessage 模拟鼠标点击

C# 证书搜索 - 为什么 Win View 工具中的序列号不起作用

java - 在自定义 Java AWS 应用程序中找不到类的序列化器

java - Joda-Time `DateTime` 对象到 `org.simpleframework.xml` ("Simple XML Serialization"库中字符串的转换器)