如何在c#中反序列化Json文件以插入表中

时间:2018-05-28 11:44:42

标签: c# json model

我有以下json,我试图反序列化将其插入到SQL表中,我试图使用JsonConvert和JObject而没有正面结果

的Json

{
"id": "123123",
"publisherId": "Empresa",
"notificationType": "Orden",
"headers": {
    "providerId": "ABC123"
},
"content": {
    "id": "987987",
    "orderId": "4444444",
    "apiName": "Services",
    "method": "GetOrder",
    "verb": "GET",
    "urlMethod": "https://api.com"
},
"contentVersion": "1.0"
}

模型

    public class Headers
    {
        public string providerId { get; set; }
    }

    public class Content
    {
        public string id { get; set; }
        public string orderId { get; set; }
        public string apiName { get; set; }
        public string method { get; set; }
        public string verb { get; set; }
        public string urlMethod { get; set; }
    }

    public class RootModel
    {
        public string id { get; set; }
        public string publisherId { get; set; }
        public string notificationType { get; set; }
        public Headers headers { get; set; }
        public Content content { get; set; }
        public string contentVersion { get; set; }
    }

代码

    public static List<Models.RootModel> getJson()
    {
        using (StreamReader r = new StreamReader("c:\\LOG\\20180528\\201805281039.json"))
        {
            string json = r.ReadToEnd();
            return JsonConvert.DeserializeObject<Models.RootModel>(json);
        }
    }

您给我以下错误

  

错误CS0029 No se puede convertirimplícitamenteeltipo'WebApplication1.Models.RootModel'en'System.Collections.Generic.List'

我真的不知道我是否在正确的轨道上,是否有必要反序列化以插入数据库,还是有另一种方式?

提前感谢您的帮助

2 个答案:

答案 0 :(得分:2)

正如错误所述,它不能隐式地将模型实例转换为模型的集合。

您正在尝试返回单个实例:

return JsonConvert.DeserializeObject<Models.RootModel>(json);

但是你的方法希望返回一个实例列表:

public static List<Models.RootModel> getJson()

如果您只是返回一个实例(因为JSON代表一个对象,而不是一个对象数组),请更改您的方法以反映:

public static Models.RootModel getJson()

答案 1 :(得分:1)

更改您的代码

public static Models.RootModel getJson()
    {
        using (StreamReader r = new StreamReader("c:\\LOG\\20180528\\201805281039.json"))
        {
            string json = r.ReadToEnd();
            return JsonConvert.DeserializeObject<Models.RootModel>(json);
        }
    }