Newtonsoft.Json:JsonConvert.DeserializeObject - 没有结果没有错误

时间:2013-04-06 12:19:51

标签: json serialization

我之前已成功使用Newtonsoft.Json反序列化JSON,但我遇到了这个简单示例的问题 - 请参阅下面 - 反序列化方法不会失败,但它不会实例化“ServiceResponse”类与预期值。调试器显示:     ServiceResponse.StatusInfo = null,     ServiceResponse.Email = null,     ServiceResponse.JobId = 0

// Generated by Xamasoft JSON Class Generator
// http://www.xamasoft.com/json-class-generator

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Example.fmeResponseJsonTypes;

namespace Example.fmeResponseJsonTypes
{

    public class StatusInfo
    {

        [JsonProperty("mode")]
        public string Mode { get; set; }

        [JsonProperty("status")]
        public string Status { get; set; }
    }

    public class ServiceResponse
    {

        [JsonProperty("statusInfo")]
        public StatusInfo StatusInfo { get; set; }

        [JsonProperty("email")]
        public string Email { get; set; }

       [JsonProperty("jobID")]
        public int JobID { get; set; }
    }

}

namespace Example
{

    public class fmeResponse
    {

        [JsonProperty("serviceResponse")]
        public ServiceResponse ServiceResponse { get; set; }

        public void Deserialize()
        {
           string res = "{\"serviceResponse\": {\"statusInfo\": {\"mode\": \"async\",\"status\": \"success\"},\"email\": \"tor.nielsen@xxx.com\",\"jobID\": 73}}";

           ServiceResponse serviceResponse = null;

           try
           {
               serviceResponse = JsonConvert.DeserializeObject<ServiceResponse>(res);
           }
           catch (Exception e)
           {
               throw new Exception("Error: Deserialization of [" + res + "] failed! \nDetails: " + e.Message + "\nTrace: " + e.StackTrace);
           }

        }

    }

}

1 个答案:

答案 0 :(得分:0)

试试这个, 请添加JsonProperty,我赶时间做了。

如果您不确定JsonString所需的类,请尝试json2csharp。它有时非常有用。

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Example.fmeResponseJsonTypes;

namespace Example.fmeResponseJsonTypes
{
public class StatusInfo
{
    public string mode { get; set; }
    public string status { get; set; }
}

public class ServiceResponse
{
    public StatusInfo statusInfo { get; set; }
    public string email { get; set; }
    public int jobID { get; set; }
}

public class RootObject
{
    public ServiceResponse serviceResponse { get; set; }
}

}

namespace Example
{

public class fmeResponse
{

    public RootObject RootObject { get; set; }

    public void Deserialize()
    {
        string res = "{\"serviceResponse\": {\"statusInfo\": {\"mode\": \"async\",\"status\": \"success\"},\"email\": \"tor.nielsen@xxx.com\",\"jobID\": 73}}";

        ServiceResponse serviceResponse = null;
        RootObject rootObject = null;

        try
        {
            rootObject = JsonConvert.DeserializeObject<RootObject>(res);
        }
        catch (Exception e)
        {
            throw new Exception("Error: Deserialization of [" + res + "] failed! \nDetails: " + e.Message + "\nTrace: " + e.StackTrace);
        }
    }
}