简体   繁体   中英

How to use json.net to Deserialize a nested class?

I have the following class

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

I am trying to use Json.Net to Deserialize requestbody but I am always getting a null for status,data. any ideas why ?

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

Just a little bit of change should be done. Your class:

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

Your data:

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

在此处输入图片说明

Your class needs to have a property of the sub-type,

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

I have used json2csharp.com to convert requestbody to c# classes and it generated these classes.it worked

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM