C# 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

我通过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-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-这篇文章对于像您这样的用户非常值得一读