反序列化c#中的嵌套json对象
本文关键字:json 对象 嵌套 反序列化 | 更新日期: 2023-09-27 18:26:28
我在javascript中有json对象作为
{"CategoryID":"1","CountryID":"1","CountryName":"United Arab Emirates",
"BillerID":"23","AccountNo":"1234567890",
"Authenticators":"{'"ConsumerNumber'":'"1234567890'",'"LastBillDate'":'"14-10-2014'",'"LastBillDueDate'":'"24-11-2014'"}",
"ShortName":"0000000001"}
我有类似于的c#类
[Serializable]
public class UserContext
{
public string CategoryID { get; set; }
public string BillerID { get; set; }
public string AccountNo { get; set; }
public string Authenticators { get; set; }
public string ShortName { get; set; }
public string CountryID { get; set; }
public string CountryName { get; set; }
}
我可以将c#中的每个元素值作为
UserContext obj1 = Deserialize<UserContext>(context);
但由于Authenticators
是嵌套的json对象,我希望C#
中有这样的东西
[Serializable]
public class Authenticators
{
public string ConsumerNumber { get; set; }
public string LastBillDate { get; set; }
public string LastBillDueDate { get; set; }
}
这样我就可以得到每个像一样的Authenticators
元素的每个值
string value = obj.ConsumerNumber;
我想用值填充两个类。我怎样才能达到同样的目的
UserContext类有一个字符串字段Authenticators,而json结构表明它是一个对象。
更改
public string Authenticators { get; set; }
至
public Authenticators Authenticators { get; set; }
然后,您可以将UserContext对象与嵌套对象Authenticators 一起反序列化
UserContext obj1 = Deserialize<UserContext>(context);
var consumerNumber = obj1.Authenticators.ConsumerNumber;
更新:
您可能需要修复javascript代码,因为现在它将已经序列化的json字符串作为字符串字段存储在UserContext对象中。
你现在拥有的东西类似于:
var data =
{
CategoryID:"1",
Authenticators: JSON.stringify({ConsumerNumber:"1234567890"})
};
var json = JSON.stringify(data);
应该是这样的:
var data =
{
CategoryID:"1",
Authenticators:{ConsumerNumber:"1234567890"}
};
var json = JSON.stringify(data);
只需更改
public string Authenticators { get; set; }
至
public Authenticators Authenticators { get; set; }
然后您可以简单地通过访问内部对象的属性
var number = obj1.Authenticators.ConsumerNumber;
但是我注意到您的JSON在使用Newtonsoft进行反序列化时出现了一些问题,我不得不将JSON字符串中Authenticators的值更改为
'Authenticators':{'ConsumerNumber':'1234567890','LastBillDate':'14-10-2014','LastBillDueDate':'24-11-2014'},
只需删除反斜杠
一旦反序列化了外部对象,就可以对Authenticators JSON字符串运行另一个反序列化,该字符串现在是obj1
上的一个属性。
这是必需的,因为您的Authenticators是字符串,它是转义的,因此在反序列化外部对象之前无法反序列化。
Authenticators obj2 = Deserialize<Authenticators>(obj1.Authenticators);
string value = obj2.ConsumerNumber;