我遇到反序列化问题。
这是我的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 ???
答案 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