C #, JSON Serializer и Deserializer на Динамических Атрибутах Класса - PullRequest
0 голосов
/ 02 мая 2019

Привет У меня есть существующий класс с именем атрибуты (ниже) с базовым набором статических атрибутов. Я использую этот класс для сериализации и десериализации с помощью 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 ]

1 голос
/ 02 мая 2019

вы можете использовать переменную динамического типа , чтобы получить информацию о 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

1 голос
/ 02 мая 2019

Вы можете попытаться сделать 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"];
   .......
}
...