繁体   English   中英

反序列化后的c#null值

[英]c# null value after deserialize

我反序列化有问题。

这是我的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呢?

您的问题不是反序列化,而是引用指针

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

或者只是将参数更改为

ref BitCurex_PRV_Ofers B)

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

如果您使用JsonConvert.Poupulate(B); 这也将为您工作,而无需任何其他更改

您的问题是您没有更改调用方中的B ,而只是更改了反序列化的方法。 您可以将B更改为ref参数,也可以从方法中将其返回。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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