我在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#class
[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;
我想用值填充两个类。我怎样才能实现同样的目标?
答案 0 :(得分:1)
您的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);
答案 1 :(得分:0)
在对外部对象进行反序列化后,可以对Authenticators JSON字符串运行另一个反序列化,该字符串现在是obj1
上的属性。
这是必需的,因为您的Authenticators是字符串,它被转义,因此在反序列化外部对象之前无法反序列化。
Authenticators obj2 = Deserialize<Authenticators>(obj1.Authenticators);
string value = obj2.ConsumerNumber;
答案 2 :(得分:0)
只需更改
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'},
只需删除反斜杠
即可