C# Json到对象反序列化
我通过api接收一个json,这个json我想去序列化为一个对象。但每次我得到的所有属性都是null 下面是我要序列化为对象的json:C# Json到对象反序列化,c#,json,deserialization,C#,Json,Deserialization,我通过api接收一个json,这个json我想去序列化为一个对象。但每次我得到的所有属性都是null 下面是我要序列化为对象的json: { "RequestReceived": "2017-05-09T12:48:16.7068095-04:00", "ResponseSent": "2017-05-09T12:48:16.7068095-04:00", "AfterAuth": "2017-05-09T12:48:16.7068095-04:00", "AfterRepo": "2017-0
{
"RequestReceived": "2017-05-09T12:48:16.7068095-04:00",
"ResponseSent": "2017-05-09T12:48:16.7068095-04:00",
"AfterAuth": "2017-05-09T12:48:16.7068095-04:00",
"AfterRepo": "2017-05-09T12:48:16.7068095-04:00",
"StatusCd": 0,
"ErrorDesc": "",
"NextPossibleRole": [
{
"NextPossibleRoleId": "40002026",
"NextPossibleRoleLongName": "Business Strategy Consultant",
"NextPossibleCareerLevel": "9"
},
{
"NextPossibleRoleId": "40003572",
"NextPossibleRoleLongName": "Senior Business Strategy Consultant",
"NextPossibleCareerLevel": "9"
},
{
"NextPossibleRoleId": "40006639",
"NextPossibleRoleLongName": "Senior Strategy Consultant",
"NextPossibleCareerLevel": "9"
}
]
}
下面是我为这个json创建的类:
public class NextPossibleRole
{
/// <summary>
///
/// </summary>
[JsonProperty("id")]
public string NextPossibleRoleId { get; }
/// <summary>
///
/// </summary>
[JsonProperty("name")]
public string NextPossibleRoleLongName { get; }
/// <summary>
///
/// </summary>
[JsonProperty("level")]
public string NextPossibleCareerLevel { get; }
}
公共类下一个可能角色
{
///
///
///
[JsonProperty(“id”)]
公共字符串NextPossibleRoleId{get;}
///
///
///
[JsonProperty(“名称”)]
公共字符串NextPossibleRoleLongName{get;}
///
///
///
[JsonProperty(“级别”)]
公共字符串NextPossibleCareerLevel{get;}
}
下面是iam用来反序列化的代码
TADObject = new NextPossibleRole();
TADObject = oSerializer.Deserialize<NextPossibleRole>(result);
taobject=new NextPossibleRole();
taobject=oSerializer.Deserialize(结果);
每次我试图通过调试器查看该类时,它都会将上述所有属性设置为null
请帮助。我将使用json2csharp生成您的C#类
然后,我将在C#命名约定中命名属性,并使用Json属性名称注释为属性指定正确的名称,就像在yoir Json对象中一样解析得到的Json字符串将导致必须实现以下类结构:
public class NextPossibleRole
{
public string NextPossibleRoleId { get; set; }
public string NextPossibleRoleLongName { get; set; }
public string NextPossibleCareerLevel { get; set; }
}
public class RootObject
{
public string RequestReceived { get; set; }
public string ResponseSent { get; set; }
public string AfterAuth { get; set; }
public string AfterRepo { get; set; }
public int StatusCd { get; set; }
public string ErrorDesc { get; set; }
public List<NextPossibleRole> NextPossibleRole { get; set; }
}
公共类下一个可能角色
{
公共字符串NextPossibleRoleId{get;set;}
公共字符串NextPossibleRoleLongName{get;set;}
公共字符串NextPossibleCareerLevel{get;set;}
}
公共类根对象
{
公共字符串RequestReceived{get;set;}
公共字符串响应sent{get;set;}
公共字符串AfterAuth{get;set;}
公共字符串AfterRepo{get;set;}
public int StatusCd{get;set;}
公共字符串ErrorDesc{get;set;}
公共列表NextPossibleRole{get;set;}
}
您必须满足合同中的每个JSON名称-值对。从您发布的内容来看,您似乎已经签订了一份分包合同,其中您定义的成员包括NextPossibleRoleId/LongName等
您的合同应处理所有名称-值对。从requestReceived开始,到NextPossibleRole结束。NextPossibleRole本身将是另一个契约,因为它包含自身的三个成员。您的类不匹配,它只是json的一部分
public class NextPossibleRole
{
public string NextPossibleRoleId { get; set; }
public string NextPossibleRoleLongName { get; set; }
public string NextPossibleCareerLevel { get; set; }
}
public class Response
{
public string RequestReceived { get; set; }
public string ResponseSent { get; set; }
public string AfterAuth { get; set; }
public string AfterRepo { get; set; }
public int StatusCd { get; set; }
public string ErrorDesc { get; set; }
public List<NextPossibleRole> NextPossibleRole { get; set; }
}
公共类下一个可能角色
{
公共字符串NextPossibleRoleId{get;set;}
公共字符串NextPossibleRoleLongName{get;set;}
公共字符串NextPossibleCareerLevel{get;set;}
}
公众课堂反应
{
公共字符串RequestReceived{get;set;}
公共字符串响应sent{get;set;}
公共字符串AfterAuth{get;set;}
公共字符串AfterRepo{get;set;}
public int StatusCd{get;set;}
公共字符串ErrorDesc{get;set;}
公共列表NextPossibleRole{get;set;}
}
那么json反序列化代码应该如下所示
JsonConvert.DeserializeObject<Response>(result);
JsonConvert.DeserializeObject(结果);
您的json显示NextPossibleRole
有一个名为NextPossibleRoleId
的属性,但是您在属性中指定了一个名为id
的属性。你的json示例正确吗?C#类中的json属性与你正在序列化的json不匹配?@Ctrl\u Alt\u从帖子中可以清楚地看出,json是NextPossibleRole
的集合,而不是一个单独的集合-你到底想确认什么?还有,Json本身并不表示NextPossibleRole
对象。它是一个Json对象/字典,具有名为“NextPossibleRole”的属性。此属性分配了许多NextPossibleRole
对象。@Alexei-这篇文章对于像您这样的用户非常值得一读