类动态属性上的C#,JSON序列化程序和反序列化程序

时间:2019-05-02 14:25:33

标签: c# json json-deserialization

嗨,我有一个名为attribute的现有类(如下),具有静态属性的基本集合。我正在使用此类通过JavaScriptSerializer进行序列化和反序列化

public class attributes
{
public string static1 {get; set;}
public string static2 {get; set;}
public string static3 {get; set;}
}

我当前基于上面的此类属性的示例JSON

{
  "static1": "val1",
  "static2": "val2",
  "static3": "val3"
}

我需要对类进行修改,以便保留基本集并扩展此类以接受新格式。我将从供应商那里收到新的JSON,他们将在其中附加属性的动态部分(在我的示例JSON中,从1到N)。这样,现有的静态属性基本集将可以访问,并且还提供了动态的属性列表(范围可以从0到n-意味着如果没有其他可用的属性,则它可以与静态的JSON相同,或者可以具有3静态属性+其他一些附加属性

具有动态和静态JSON的新

{
  "static1": "val1",
  "static2": "val2",
  "static3": "val3",
  "dynamic1": "dyn1",
           .
           .
  "dynamicN": "dynN"
}

任何人都可以提供一些有关如何最好地表示这个新类的信息,从而满足新的要求(在我获得的JSON中可能有更多属性)?

谢谢

2 个答案:

答案 0 :(得分:1)

您可以尝试使用dynamic对象来手动解析您的json结果。

类似这样的东西(使用Newtonsoft.Json):

dynamic json = JsonConvert.DeserializeObject(jsonResult);
foreach (dynamic item in json)
{
   //manually get the values
   var static1= item["static1"];
   var static2= item["static2"];
   .......
}

答案 1 :(得分:1)

您可以使用dynamics type variable来获取未在您的课程中映射的JSON信息

var json = new JavaScriptSerializer();
string data = "{ "+
"\"0\": {" +
"   \"sku\": \"trickeye\", " +
"   \"calendar_type\": \"date\", " +
"   \"voucher_type\": \"Instant Voucher\"   " +
"},"+
" \"1\": { " +
"   \"sku\": \"lovemuseum\", " +
"   \"calendar_type\": \"date\", " +
"   \"voucher_type\": \"Instant Voucher\"} " +
"}";
dynamic dictionary = json.DeserializeObject(data);

var firstDefinition = dictionary["0"] as Dictionary<string, object>;

Console.WriteLine(firstDefinition);
Console.WriteLine(dictionary["0"]["sku"].ToString());

enter image description here