Javascript 反序列化c中的嵌套json对象#

Javascript 反序列化c中的嵌套json对象#,javascript,c#,json,Javascript,C#,Json,我在javascript中有json对象作为 {"CategoryID":"1","CountryID":"1","CountryName":"United Arab Emirates", "BillerID":"23","AccountNo":"1234567890", "Authenticators":"{\"ConsumerNumber\":\"1234567890\",\"LastBillDate\":\"14-10-2014\",\"LastBillDueDate\":\"24-11-

我在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与

我可以用c#as获得每个元素的值

这样我就可以得到每个
验证器
元素的每个值

string value = obj.ConsumerNumber;

我想用值填充两个类。如何实现相同的功能?

反序列化外部对象后,可以对Authenticators JSON字符串运行另一个反序列化,该字符串现在是
obj1
上的属性

这是必需的,因为验证器是一个字符串,它是转义的,因此在反序列化外部对象之前无法反序列化

Authenticators obj2 = Deserialize<Authenticators>(obj1.Authenticators);
string value = obj2.ConsumerNumber;
Authenticators obj2=反序列化(obj1.Authenticators);
字符串值=obj2.ConsumerNumber;

您的UserContext类有一个字符串字段验证器,而json结构表明它是一个对象

改变

public string Authenticators { get; set; }

然后可以反序列化UserContext对象以及嵌套的对象身份验证器

UserContext obj1 = Deserialize<UserContext>(context);
var consumerNumber = obj1.Authenticators.ConsumerNumber;
应该是这样的:

var data =
 {
   CategoryID:"1",
   Authenticators:{ConsumerNumber:"1234567890"}
 };
 var json = JSON.stringify(data);
换衣服

public string Authenticators { get; set; }

然后,您可以通过以下方式访问内部对象的属性

var number = obj1.Authenticators.ConsumerNumber;
但是我注意到在使用Newtonsoft反序列化JSON时出现了一些问题,我不得不将JSON字符串中的验证器值更改为

'Authenticators':{'ConsumerNumber':'1234567890','LastBillDate':'14-10-2014','LastBillDueDate':'24-11-2014'},

只需删除反斜杠

如果我的json字符串不包含验证器
,该怎么办?一些错误处理机制?您可以在第二次反序列化之前添加一个条件,以检查验证器字符串是否包含一个值:
if(obj1.Authenticators!=''{}
。如果您认为该值可能并不总是有效的JSON字符串,则可以使用try-catch。执行line
Authenticators obj2=反序列化(obj1.Authenticators)时,路径中的异常
非法字符。
则您的验证器字符串不是有效的JSON。反序列化外部对象后,请尝试打印它以查看它包含的内容。然后如何提取
ConsumerNumber
?它会出现异常
无法将类型为“System.String”的对象转换为类型为“MyWebApplication.App\u code.Authenticators”
的第行
UserContext obj1=反序列化(context1)这不起作用。验证器是一个字符串。反序列化不会将其转换为对象,因为JSON被转义。@GeorgePolevoy,谢谢,但我的一个变量将需要所有三个变量值,即单个变量中的
“{\”ConsumerNumber\:\“1234567890\”,“LastBillDate\:“14-10-2014\”,“LastBillDueDate\”:“24-11-2014\”
。我怎样才能得到那个值呢?恐怕我不能改变javascript中json字符串的结构!
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;
'Authenticators':{'ConsumerNumber':'1234567890','LastBillDate':'14-10-2014','LastBillDueDate':'24-11-2014'},