C# 在c语言中反序列化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

我有以下json响应

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#类。