C# 如何使用json.net反序列化嵌套类?

C# 如何使用json.net反序列化嵌套类?,c#,json.net,C#,Json.net,我有以下课程 public class CallbackResultsJson { public class CallbackResults { public string Status { get; set; } public string Message { get; set; } public string Data { get; set; } public string Log { get; se

我有以下课程

 public class CallbackResultsJson
    {
    public class CallbackResults
    {

        public string Status { get; set; }
        public string Message { get; set; }
        public string Data { get; set; }
        public string Log { get; set; }
        public string StatusText { get; set; }
        public string TransactionToken { get; set; }
    }
}
我试图使用Json.Net来反序列化requestbody,但我总是得到一个空的状态和数据知道为什么吗?

var requestbody =@"
{
    "CallbackResults":
    {
        "TransactionToken":"b65524-qwe",
        "Status":0,
        "Message":"Publish Application to QaLevel Operation Completed",
        "Data":[],
        "Log":["sucess"
    },
    "RequestNumber":"REQ1234"
}"

var TransactionResult = JsonConvert.DeserializeObject<CallbackResultsJson.CallbackResults>(requestBody);
var requestbody=@”
{
“回调结果”:
{
“TransactionToken”:“b65524 qwe”,
“状态”:0,
“消息”:“将应用程序发布到QAELEVEL操作已完成”,
“数据”:[],
“日志”:[“成功”
},
“请求编号”:“请求1234”
}"
var TransactionResult=JsonConvert.DeserializeObject(requestBody);

您的类需要具有子类型的属性

public class CallbackResultsJson
{
    public CallBackResults CallbackResults { get; set; }

    public string RequestNumber { get; set; )

    public class CallbackResults
    {

        public string Status { get; set; }
        public string Message { get; set; }
        public string Data { get; set; }
        public string Log { get; set; }
        public string StatusText { get; set; }
        public string TransactionToken { get; set; }
    }
}

var result = JsonConvert.DeserializeObject<CallbackResultsJson>(requestBody);
public类CallbackResultsJson
{
公共CallBackResults CallBackResults{get;set;}
公共字符串RequestNumber{get;set;)
公共类回调结果
{
公共字符串状态{get;set;}
公共字符串消息{get;set;}
公共字符串数据{get;set;}
公共字符串日志{get;set;}
公共字符串StatusText{get;set;}
公共字符串TransactionToken{get;set;}
}
}
var result=JsonConvert.DeserializeObject(requestBody);

您的类需要具有子类型的属性

public class CallbackResultsJson
{
    public CallBackResults CallbackResults { get; set; }

    public string RequestNumber { get; set; )

    public class CallbackResults
    {

        public string Status { get; set; }
        public string Message { get; set; }
        public string Data { get; set; }
        public string Log { get; set; }
        public string StatusText { get; set; }
        public string TransactionToken { get; set; }
    }
}

var result = JsonConvert.DeserializeObject<CallbackResultsJson>(requestBody);
public类CallbackResultsJson
{
公共CallBackResults CallBackResults{get;set;}
公共字符串RequestNumber{get;set;)
公共类回调结果
{
公共字符串状态{get;set;}
公共字符串消息{get;set;}
公共字符串数据{get;set;}
公共字符串日志{get;set;}
公共字符串StatusText{get;set;}
公共字符串TransactionToken{get;set;}
}
}
var result=JsonConvert.DeserializeObject(requestBody);

只需要做一点改变。 你们班:

public class CallbackResultsJson
{
    public CallbackResultsClass CallbackResults { get; set; }
    public string RequestNumber { get; set; }

    public class CallbackResultsClass
    {
        public int Status { get; set; }
        public string Message { get; set; }
        public string[] Data { get; set; }
        public string Log { get; set; }
        public string TransactionToken { get; set; }
    }
}
您的数据:

var requestbody = @"
        {
            ""CallbackResults"":
            {
                ""TransactionToken"":""b65524-qwe"",
                ""Status"":0,
                ""Message"":""Publish Application to QaLevel Operation Completed"",
                ""Data"":[""Data1"", ""Data2""],
                ""Log"":""sucess""
            },
            ""RequestNumber"":""REQ1234""
        }";


        var result = JsonConvert.DeserializeObject<CallbackResultsJson>(requestbody);
var requestbody=@”
{
“回调结果”:
{
“TransactionToken”:“b65524 qwe”,
“状态”:0,
“”消息“”:“”将应用程序发布到QaLevel操作已完成“”,
“数据”:[“数据1”、“数据2”],
“日志”:“成功”
},
“请求编号”:“请求1234”
}";
var result=JsonConvert.DeserializeObject(requestbody);

只需要做一点改变。 你们班:

public class CallbackResultsJson
{
    public CallbackResultsClass CallbackResults { get; set; }
    public string RequestNumber { get; set; }

    public class CallbackResultsClass
    {
        public int Status { get; set; }
        public string Message { get; set; }
        public string[] Data { get; set; }
        public string Log { get; set; }
        public string TransactionToken { get; set; }
    }
}
您的数据:

var requestbody = @"
        {
            ""CallbackResults"":
            {
                ""TransactionToken"":""b65524-qwe"",
                ""Status"":0,
                ""Message"":""Publish Application to QaLevel Operation Completed"",
                ""Data"":[""Data1"", ""Data2""],
                ""Log"":""sucess""
            },
            ""RequestNumber"":""REQ1234""
        }";


        var result = JsonConvert.DeserializeObject<CallbackResultsJson>(requestbody);
var requestbody=@”
{
“回调结果”:
{
“TransactionToken”:“b65524 qwe”,
“状态”:0,
“”消息“”:“”将应用程序发布到QaLevel操作已完成“”,
“数据”:[“数据1”、“数据2”],
“日志”:“成功”
},
“请求编号”:“请求1234”
}";
var result=JsonConvert.DeserializeObject(requestbody);

我使用json2csharp.com将requestbody转换为c#类,它生成了这些类。它成功了

 public class CallbackResults
    {
        public string TransactionToken { get; set; }
        public int Status { get; set; }
        public string Message { get; set; }
        public List<string> Data { get; set; }
        public List<string> Log { get; set; }
    }

    public class CallbackResultsRootObj
    {
        public CallbackResults VdiCallbackResults { get; set; }
        public string RequestNumber { get; set; }
    }
  var vdiTransactionResult = JsonConvert.DeserializeObject<CallbackResultsRootObj>(requestBody);
公共类回调结果
{
公共字符串TransactionToken{get;set;}
公共int状态{get;set;}
公共字符串消息{get;set;}
公共列表数据{get;set;}
公共列表日志{get;set;}
}
公共类CallbackResultsRootObj
{
public CallbackResults VdiCallbackResults{get;set;}
公共字符串RequestNumber{get;set;}
}
var vdiTransactionResult=JsonConvert.DeserializeObject(requestBody);

我使用json2csharp.com将requestbody转换为c#类,它生成了这些类。它成功了

 public class CallbackResults
    {
        public string TransactionToken { get; set; }
        public int Status { get; set; }
        public string Message { get; set; }
        public List<string> Data { get; set; }
        public List<string> Log { get; set; }
    }

    public class CallbackResultsRootObj
    {
        public CallbackResults VdiCallbackResults { get; set; }
        public string RequestNumber { get; set; }
    }
  var vdiTransactionResult = JsonConvert.DeserializeObject<CallbackResultsRootObj>(requestBody);
公共类回调结果
{
公共字符串TransactionToken{get;set;}
公共int状态{get;set;}
公共字符串消息{get;set;}
公共列表数据{get;set;}
公共列表日志{get;set;}
}
公共类CallbackResultsRootObj
{
public CallbackResults VdiCallbackResults{get;set;}
公共字符串RequestNumber{get;set;}
}
var vdiTransactionResult=JsonConvert.DeserializeObject(requestBody);

在JSON中,
状态
是一个整数,而不是字符串,
数据
是一个数组,而不是字符串,
日志
是一个格式错误的数组(无括号)。您应该会收到此JSON的异常,即使您修复了
日志的数组,也会因为类型不匹配而收到异常。请发布实际代码,此代码甚至不会编译,因为格式不正确的字符串(您在字符串中使用
,但应使用
),您缺少一个分号,并且在反序列化调用中使用的类名与上面的示例类不匹配。您基本上在此处重新键入了问题并犯了其他错误。在JSON中,
Status
是整数,而不是字符串,
Data
是数组,而不是字符串,
Log
是格式错误的数组(无结束括号)。此JSON应该会出现异常,即使您修复了
日志的数组
,也会因为类型不匹配而出现异常。请发布实际代码,由于字符串格式错误,此代码甚至无法编译(您在字符串中使用
,但应使用
),您缺少分号,并且在反序列化调用中使用的类名与上面的示例类不匹配。您基本上在此处重新键入了问题,并出现了其他错误。