反序列化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;

我想用值填充两个类。我怎样才能达到同样的目的

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

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;