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

时间:2019-06-24 06:53:19

标签: 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; set; }
        public string StatusText { get; set; }
        public string TransactionToken { get; set; }
    }
}

我正在尝试使用Json.Net对请求主体进行反序列化,但是我总是会得到状态,数据为null的信息。 有什么想法吗?

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);

3 个答案:

答案 0 :(得分:2)

只需稍作更改即可。 您的课程:

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);

enter image description here

答案 1 :(得分:0)

您的课程需要具有子类型的属性,

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);

答案 2 :(得分:0)

我已经使用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);