将 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 id
和 status
中是字符串,在您的 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);
我有一个 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 id
和 status
中是字符串,在您的 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);