将 json 转换为 C# 对象

Converting json to c# object

我有一个 api,return 给我一个 json,其中包含有关数据转换的信息和一个包含数据的数组

{
    "code": "200",
    "result": true,
    "message": "",
    "data": {
        "item": [
            {
                "id": "5",
                "descricao": "TesteDesc",
                "observacao": "TesteObs",
                "status": "1"
            },
            {
                "id": "7",
                "descricao": "TesteDesc",
                "observacao": "TesteObs",
                "status": "1"
            },
        ],
        "count": 2
    }
}

我有一个 class 是指 return 项

class Category
 {
     public int Id { get; set; }
     public string Descricao { get; set; }
     public int Status { get; set; }
     public string Observacao { get; set; }
 }

Main.cs

 var stringJson = await response.Content.ReadAsStringAsync();

我的字符串stringJson得到以下值

"\r\n\r\n{\"code\":\"200\",\"result\":true,\"message\":\"\",\"data\":{\"item\":[{\"id\":\"5\",\"descricao\":\"TesteDesc\",\"observacao\":\"TesteObs\",\"status\":\"1\"}],\"count\":2}}"

但是当我尝试转换时

var Data = JsonConvert.DeserializeObject<IEnumerable<Category>>(stringJson);

显示错误

Erro: cannot deserialize the current json object (e.g. {"name":"value"}) into type ...

如何使用 json 数据创建对象数组? 只取日期和项目

我是否可以单独正式检索这些值,例如我创建了一个变量 bool status = jsonConvert.get ("status");类似的东西?

首先你外JSON格式是对象,不是数组。

模特们会喜欢的。

public class Item
{
    public string id { get; set; }
    public string descricao { get; set; }
    public string observacao { get; set; }
    public string status { get; set; }
}

public class Data
{
    public List<Item> item { get; set; }
    public int count { get; set; }
}

public class Category
{
    public string code { get; set; }
    public bool result { get; set; }
    public string message { get; set; }
    public Data data { get; set; }
}

反序列化json

var Data = JsonConvert.DeserializeObject<Category>(stringJson);
List<Item> items = Data.data.item;
//items get info from items 

遵循结构!您的 json 包含的不仅仅是一个 List<Category>。反序列化时,您必须将 zr 反序列化为 class,如下所示

 class Wrapper {
      public string code {get;set;}
      public bool result {get;set;}
      public string message {get;set;}
      public Data data {get; set;}
  }


 class Data {
      public List<Category> item {get;set;}
      public int count {get; set;}
 }

然后你可以反序列化使用

 Wrapper d = JsonConvert.DeserializeObject<Wrapper>(stringJson);

并使用

访问您的项目
d.data.item

关注套管!在您的 json 中,所有属性都以小写字母开头,而在您的 Category class 中,它们都是大写字母。或者,您可以定义一个忽略大小写的合同解析器。请参阅有关其工作原理的文档。

关注类型!在您的 json idstatus 中是字符串,在您的 Category class 中它们是整数。您也可以使用合同解析器来解决这个问题。有关详细信息,请参阅文档。

作为替代方案,您可以使用属性控制序列化,以保持您的 属性 名称与 general naming conventions used in the .NET Framework 一致:

public class Item
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("descricao")]
    public string Descricao { get; set; }

    [JsonProperty("observacao")]
    public string Observacao { get; set; }

    [JsonProperty("status")]
    public string Status { get; set; }
}

public class Data
{
    [JsonProperty("item")]
    public List<Item> Items { get; set; }

    [JsonProperty("count")]
    public int Count { get; set; }
}

public class Response
{
    [JsonProperty("code")]
    public string Code { get; set; }

    [JsonProperty("result")]
    public bool Result { get; set; }

    [JsonProperty("message")]
    public string Message { get; set; }

    [JsonProperty("data")]
    public Data Items { get; set; }
}

反序列化 json 字符串的代码:

string json = @"{
    ""code"": ""200"",
    ""result"": true,
    ""message"": ""some message"",
    ""data"": {
        ""item"": [
            {
                ""id"": ""5"",
                ""descricao"": ""TesteDesc"",
                ""observacao"": ""TesteObs"",
                ""status"": ""1""
            },
            {
                ""id"": ""7"",
                ""descricao"": ""TesteDesc"",
                ""observacao"": ""TesteObs"",
                ""status"": ""1""
            },
        ],
        ""count"": 2
    }
}";

Response response = JsonConvert.DeserializeObject<Response>(json);

从 Nuget 安装 Newtonsoft.Json 然后尝试一下

string JsonData = "\r\n\r\n{\"code\":\"200\",\"result\":true,\"message\":\"\",\"data\":{\"item\":[{\"id\":\"5\",\"descricao\":\"TesteDesc\",\"observacao\":\"TesteObs\",\"status\":\"1\"}],\"count\":2}}";
JObject jobject = (JObject)JsonConvert.DeserializeObject(JsonData);