В вашем json некоторые из ваших данных ключ / значение являются фиксированными, а некоторые из данных пары ключ / значение являются случайными или просто говорят, что они динамические.
Затем вы можете объявить свойства для фиксированной пары ключ / значение.но проблема возникла, когда возникла его динамика, и вопрос, который вы задали.
Итак, у Newtonsoft.json есть одна особенность, которая будет использоваться здесь, и это [JsonExtensionData]
. Подробнее
Данные расширения теперь записываются при сериализации объекта.Чтение и запись данных расширения позволяет автоматически выполнять обход всех JSON без добавления каждого свойства к типу .NET, к которому вы десериализуетесь.Объявляйте только те свойства, которые вас интересуют, и позволяйте данным расширения делать все остальное.
Теперь вы можете добавить свойства для парных данных с фиксированным ключом / значением следующим образом.
public string fixedName1 {get;set;}
public string fixedName2 {get;set;}
А для динамической или случайной пары ключ / значение необходимо украсить свойство Dictionary с помощью [JsonExtensionData]
.как
[JsonExtensionData]
public Dictionary<string, JToken> randomNames {get;set;}
Таким образом, ваш класс будет выглядеть как
class MyJson
{
public string fixedName1 {get;set;}
public string fixedName2 {get;set;}
[JsonExtensionData]
public Dictionary<string, JToken> randomNames {get;set;}
}
Теперь попробуйте сериализовать ваши данные с указанным выше классом, вы никогда не получите имя словаря в выходном сериализованном json.
Вы можете попробовать выше класса, как
MyJson myJson = new MyJson();
myJson.fixedName1 = "ABC";
myJson.fixedName2 = "PQR";
myJson.randomNames = new Dictionary<string, JToken>();
myJson.randomNames.Add("randomName1", JToken.FromObject(new MyJsonClass2 { Name = "QWERTY" }));
myJson.randomNames.Add("randomNameN", JToken.FromObject(new MyJsonClass2 { Name = "ZXCVBNM" }));
string json = JsonConvert.SerializeObject(myJson);
Выход:
![enter image description here](https://i.stack.imgur.com/QxzZj.png)