C# 在c语言中反序列化json响应#
我有以下json响应C# 在c语言中反序列化json响应#,c#,asp.net-mvc,json-deserialization,C#,Asp.net Mvc,Json Deserialization,我有以下json响应 var loginJsonString= { "odata.metadata": "http://xxxxxxxx:7048/DynamicsNAV90/OData/$metadata#vehicle", "value": [{ "Model": "", "Description": "", "ETag": "16;kF8BAAJ7AAAAAAA=6;3481190;" }, { "Model": "8889", "Descripti
var loginJsonString= {
"odata.metadata": "http://xxxxxxxx:7048/DynamicsNAV90/OData/$metadata#vehicle",
"value": [{
"Model": "",
"Description": "",
"ETag": "16;kF8BAAJ7AAAAAAA=6;3481190;"
}, {
"Model": "8889",
"Description": "",
"ETag": "28;kF8BAAJ7BDgAOAA4ADkAAAAAAA==6;2568000;"
}, {
"Model": "AAA",
"Description": "bbbb",
"ETag": "24;kF8BAAJ7/0EAQQBBAAAAAAA=6;3481740;"
}, {
"Model": "BMW",
"Description": "aa",
"ETag": "24;kF8BAAJ7/0IATQBXAAAAAAA=6;2464790;"
}, {
"Model": "MODEL1",
"Description": "Model1 Description.",
"ETag": "32;kF8BAAJ7/00ATwBEAEUATAAxAAAAAAA=6;3868770;"
}, {
"Model": "MODEL2",
"Description": "Model2 Description.",
"ETag": "32;kF8BAAJ7/00ATwBEAEUATAAyAAAAAAA=6;3868870;"
}, {
"Model": "MODEL4",
"Description": "Model4 Description.",
"ETag": "32;kF8BAAJ7/00ATwBEAEUATAA0AAAAAAA=6;3869770;"
}, {
"Model": "MODEL5",
"Description": "Model5 Description.",
"ETag": "32;kF8BAAJ7/00ATwBEAEUATAA1AAAAAAA=6;3869870;"
}, {
"Model": "MODEL6",
"Description": "Model6 Description.",
"ETag": "32;kF8BAAJ7/00ATwBEAEUATAA2AAAAAAA=6;3986650;"
}, {
"Model": "MODEL7",
"Description": "Model7 Description.",
"ETag": "32;kF8BAAJ7/00ATwBEAEUATAA3AAAAAAA=6;3987710;"
}, {
"Model": "SSS",
"Description": "sss",
"ETag": "24;kF8BAAJ7/1MAUwBTAAAAAAA=6;3481310;"
}, {
"Model": "VEHICLE MODEL",
"Description": "",
"ETag": "52;kF8BAAJ7/1YARQBIAEkAQwBMAEUAIABNAE8ARABFAEwAAAAAAA==6;3851550;"
}, {
"Model": "VITZ",
"Description": "Car Type",
"ETag": "28;kF8BAAJ7/1YASQBUAFoAAAAAAA==6;3481880;"
}, {
"Model": "VITZ1",
"Description": "Car Type",
"ETag": "28;kF8BAAJ7/1YASQBUAFoAMQAAAAAA6;3482080;"
}, {
"Model": "VITZ2",
"Description": "Car Type",
"ETag": "28;kF8BAAJ7/1YASQBUAFoAMgAAAAAA6;3483250;"
}, {
"Model": "VITZ3",
"Description": "Car Type",
"ETag": "28;kF8BAAJ7/1YASQBUAFoAMwAAAAAA6;3483600;"
}]
}
我想将上述响应反序列化为,
例如:“型号=AAA说明=bbbb”
我尝试了以下的事情。创建了一个模型类
public class Vehicle
{
[JsonProperty("Model")]
public string Model { get; set; }
[JsonProperty("Description")]
public string Description { get; set; }
[JsonProperty("ETag")]
public string ETag { get; set; }
}
然后我使用了反序列化Object()方法
Vehicle vehicleobj=JsonConvert.DeserializeObject(loginJsonString);
但我无法获取vehicleobj的值。它显示null。
谁能帮我解决这个问题。您的问题是您有一个属性
值
,它是车辆的数组。因此,您需要反序列化到一个具有以下内容的类:
public class Response
{
public List<Vehicle> Value {get; set;}
}
您的问题是您有一个属性值
,它是车辆
的数组。因此,您需要反序列化到一个具有以下内容的类:
public class Response
{
public List<Vehicle> Value {get; set;}
}
你会想要这个:
class LoginResponse
{
[JsonProperty("odata.metadata")]
public String ODataMetadata { get; set; }
[JsonProperty("value")]
public List<Vehicle> Vehicles { get; set; }
}
class Vehicle
{
// same as before...
}
LoginResponse response = JsonConvert.DeserializeObject<Vehicle>( loginJsonString );
foreach( Vehicle veh in response.Vehicles )
{
}
类登录响应
{
[JsonProperty(“odata.metadata”)]
公共字符串ODataMetadata{get;set;}
[JsonProperty(“价值”)]
公共列表车辆{get;set;}
}
等级车辆
{
//和以前一样。。。
}
LoginResponse response=JsonConvert.DeserializeObject(loginJsonString);
foreach(车辆响应车辆)
{
}
您将需要:
class LoginResponse
{
[JsonProperty("odata.metadata")]
public String ODataMetadata { get; set; }
[JsonProperty("value")]
public List<Vehicle> Vehicles { get; set; }
}
class Vehicle
{
// same as before...
}
LoginResponse response = JsonConvert.DeserializeObject<Vehicle>( loginJsonString );
foreach( Vehicle veh in response.Vehicles )
{
}
类登录响应
{
[JsonProperty(“odata.metadata”)]
公共字符串ODataMetadata{get;set;}
[JsonProperty(“价值”)]
公共列表车辆{get;set;}
}
等级车辆
{
//和以前一样。。。
}
LoginResponse response=JsonConvert.DeserializeObject(loginJsonString);
foreach(车辆响应车辆)
{
}
您正在尝试将JSON对象反序列化为单个车辆
对象,但它不是。它是另一种东西,比如车辆响应
:
新车型(除现有车辆
等级外):
public-class-vehiclerresponse{//我相信你能想出一个更合适的名字
{
[JsonProperty(“odata.metadata”)]
公共字符串元数据{get;set;}
[JsonProperty(“价值”)]
公共IEnumerable车辆{get;set;}
}
然后按如下方式反序列化:
VehicleResult vehicleobj = JsonConvert.DeserializeObject<VehicleResult>(loginJsonString);
var vehicle1 = VehicleResult.Vehicles.FirstOrDefault(); // null if no vehicles
VehiclerResult vehicleobj=JsonConvert.DeserializeObject(loginJsonString);
var vehicle1=VehicleResult.Vehicles.FirstOrDefault();//如果没有车辆,则为null
您正试图将JSON对象反序列化为单个车辆
对象,但事实并非如此。它可能是另一个对象,比如车辆响应
:
新车型(除现有车辆
等级外):
public-class-vehiclerresponse{//我相信你能想出一个更合适的名字
{
[JsonProperty(“odata.metadata”)]
公共字符串元数据{get;set;}
[JsonProperty(“价值”)]
公共IEnumerable车辆{get;set;}
}
然后按如下方式反序列化:
VehicleResult vehicleobj = JsonConvert.DeserializeObject<VehicleResult>(loginJsonString);
var vehicle1 = VehicleResult.Vehicles.FirstOrDefault(); // null if no vehicles
VehiclerResult vehicleobj=JsonConvert.DeserializeObject(loginJsonString);
var vehicle1=VehicleResult.Vehicles.FirstOrDefault();//如果没有车辆,则为null
安装Newtonsoft.json
public class Vehicle
{
public class Value
{
public string Model { get; set; }
public string Description { get; set; }
public string ETag { get; set; }
}
public class RootObject
{
public List<Value> Value { get; set; }
}
}
公共级车辆
{
公共阶级价值
{
公共字符串模型{get;set;}
公共字符串说明{get;set;}
公共字符串ETag{get;set;}
}
公共类根对象
{
公共列表值{get;set;}
}
}
反序列化对象
public async Task<RootObject> GetVehiclesAsync()
{
RootObject rootObject = null;
var client = new HttpClient();
string restUrl = "https://www.foo.com/vehicle/api/";
var uri = new Uri(restUrl);
var response = await client.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
rootObject = JsonConvert.DeserializeObject<RootObject>(content);
}
return rootObject;
}
RootObject Root = await GetVehiclesAsync();
foreach (var item in Root.Value)
{
// Do something here
// item.Model
// item.Description
// item.ETag
}
公共异步任务GetVehicleSync()
{
RootObject RootObject=null;
var client=新的HttpClient();
字符串restUrl=”https://www.foo.com/vehicle/api/";
var uri=新uri(restUrl);
var response=await client.GetAsync(uri);
if(响应。IsSuccessStatusCode)
{
var content=await response.content.ReadAsStringAsync();
rootObject=JsonConvert.DeserializeObject(内容);
}
返回根对象;
}
RootObject Root=等待GetVehicleSync();
foreach(Root.Value中的变量项)
{
//在这里做点什么
//项目.模型
//项目.说明
//项目1.ETag
}
安装Newtonsoft.json
public class Vehicle
{
public class Value
{
public string Model { get; set; }
public string Description { get; set; }
public string ETag { get; set; }
}
public class RootObject
{
public List<Value> Value { get; set; }
}
}
公共级车辆
{
公共阶级价值
{
公共字符串模型{get;set;}
公共字符串说明{get;set;}
公共字符串ETag{get;set;}
}
公共类根对象
{
公共列表值{get;set;}
}
}
反序列化对象
public async Task<RootObject> GetVehiclesAsync()
{
RootObject rootObject = null;
var client = new HttpClient();
string restUrl = "https://www.foo.com/vehicle/api/";
var uri = new Uri(restUrl);
var response = await client.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
rootObject = JsonConvert.DeserializeObject<RootObject>(content);
}
return rootObject;
}
RootObject Root = await GetVehiclesAsync();
foreach (var item in Root.Value)
{
// Do something here
// item.Model
// item.Description
// item.ETag
}
公共异步任务GetVehicleSync()
{
RootObject RootObject=null;
var client=新的HttpClient();
字符串restUrl=”https://www.foo.com/vehicle/api/";
var uri=新uri(restUrl);
var response=await client.GetAsync(uri);
if(响应。IsSuccessStatusCode)
{
var content=await response.content.ReadAsStringAsync();
rootObject=JsonConvert.DeserializeObject(内容);
}
返回根对象;
}
RootObject Root=等待GetVehicleSync();
foreach(Root.Value中的变量项)
{
//在这里做点什么
//项目.模型
//项目.说明
//项目1.ETag
}
JSON与您的c#类非常不同。请参考答案轻松创建正确的c#类。JSON与您的c#类非常不同。请参考答案轻松创建正确的c#类。