反序列化后的c#空值

时间:2015-11-17 17:35:11

标签: c# json null

我遇到反序列化问题。

这是我的json结构

{ "status": "ok", 
  "data": [
    {
      "issued": 1447358848072, 
      "volume": "5.52565454", 
      "currency": "pln", 
      "limit": "724.2500", 
      "type": "bid", 
      "id": "2015/11/12/13328345/4836"
    }, 
    {
      "issued": 1447359927423, 
      "volume": "1.25465440", 
      "currency": "pln", 
      "limit": "1850.5000", 
      "type": "ask", 
      "id": "2015/11/12/13328342/8188"
     }
  ]
}

这是我在C#中的课程和功能:

public class oferta
{
    public string issued { get; set; }
    public string volume { get; set; }
    public string currency { get; set; }
    public string limit { get; set; }
    public string type { get; set; }
    public string id { get; set; }
}

public class tBitCurex_PRV_Offers
{        
    public string status { get; set; }        
    public List<oferta> data { get; set; }
}


public void GetPRV_Offers(tBitCurex_PRV_Offers B)
        {
            try
            {
                var RSP = "my json string";

                B = JsonConvert.DeserializeObject<tBitCurex_PRV_Offers>(RSP);

                if (B.data.Count > 0)
                {
                    // in here COUNT = 2 and all works fine.
                    // and B.status = "ok"   
                    // but when function is end i have a null
                }
            }

            catch (Exception oException)
            {
                MessageBox.Show(oException.Message);
            }
        }

    public void Pobierz_PRV_Offers()
        {
            try
            {
                var BitCurexOfers = new tBitCurex_PRV_Offers();
                GetPRV_Offers(BitCurexOfers);

                if (BitCurexOfers.status == "ok")
                {
                  // do something with BitcurexOffers;
                  // I have a NULL if a use deserialize. 
                }
            }
            catch
            {
                sbInfo2.Text = "Error..xxxx";
            }
            finally
            {
                Application.DoEvents();
            }
        }

在使用类似功能时

JObject oObject = JObject.Parse("json string");
B.status = (string)oObject["status"];

然后在函数内外都能正常工作。

我应该如何正确使用JsonConvert.DeserializeObject ???

3 个答案:

答案 0 :(得分:0)

你的问题不在于反序列化,而在于引用指针

而不是void,将Function的返回类型更改为BitCurex_PRV_Ofers并在函数返回B的末尾;并将BitCurexOfers分配给函数调用的结果,而不是实例化新实例

或者只是将参数更改为

ref BitCurex_PRV_Ofers B)

这种情况正在发生,因为您在B中获得了指向BitCurexOfers的指针,然后使用反序列化的结果更改该指针

如果使用JsonConvert.Poupulate(B);这对你没有任何其他改变也适用

答案 1 :(得分:0)

您的问题是,您不会在调用者中更改B,而只是您正在进行反序列化的方法。您可以将B更改为ref参数,也可以将其从方法中返回。

答案 2 :(得分:0)

您的示例代码有一些错误。尝试添加此属性,它应该工作。

[Newtonsoft.Json.JsonObject(Title =“root”)] 公共类tBitCurex_PRV_Offers