如何用Newtonsoft.Json DeserializeObject?

时间:2015-06-11 06:10:13

标签: c# json

我将Json字符串反序列化为Object.This是我的Json字符串需要反序列化。

{
    "response": {
        "total_results": 33,
        "trades": [
            {
                "tid": "E231958349",
                "num": 1,
                "num_iid": 3424234,
                "price": 200.07
            }]
                }
}

我已经定义了一个响应模型。这是我的代码:

    public class ResponseModel
    {
        public int total_results { set; get; }
        public List<TradeModel> trades{ set; get;}        
    }

我还定义了交易模型:

    public class TradeModel
    {
        #region Attribute

        #region oid
        private int tid;

        public int Oid
        {
            get { return tid; }
            set { tid = value; }
        }
        #endregion

        #endregion
    }

这是我的反序列化代码:

        public static ResponseModel MapResonseJsonToModel(string json)
        {
            ResponseModel orderModel = new ResponseModel();                   
            orderModel = JsonConvert.DeserializeObject<ResponseModel>(json);                   
            return orderModel;
        }

我的问题是:为什么每次 total_results 返回0,交易返回null?正确的是33,而不是空交易对象!

2 个答案:

答案 0 :(得分:2)

由于JSON的格式,JsonConvert将在response中查找名为ResponseModel的属性。尝试将您的JSON更改为仅作为响应的值,或者创建另一个类:

public class ResponseContainer
{
   public ResponseModel response {get;set;} 
}

答案 1 :(得分:1)

这里的问题可能与您的JSON格式有关。您的JSON最外面的项目response,其中包含两个子项total_resultstrades。要使上述代码起作用,您的JSON应该是这样的:

{
        "total_results": 33,
        "trades": [
            {
                "tid": "E231958349",
                "num": 1,
                "num_iid": 3424234,
                "price": 200.07
            }]       
}

如果您打算保持原样,那么将您的模型更改为Mike在答案中所说的内容。您可以选择以下两种方式之一。

希望这清楚。