JsonExtensionData
Словарь объявляют как
Dictionary<string, JsonElement>.
Известные свойства, например
Name, в словарь не
попадают. Нужен
using System.Text.Json.
Обязательные поля -
JsonRequired,
скрытые -
JsonIgnore.
Синтаксис
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
[JsonExtensionData]
public Dictionary<string, JsonElement> Extra { get; set; }
Пример
Давайте прочитать лишний ключ
extra:
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
class Flex
{
public string Name { get; set; }
[JsonExtensionData]
public Dictionary<string, JsonElement> Extra { get; set; }
}
class Program
{
static void Main()
{
var flex = JsonSerializer.Deserialize<Flex>(
"{\"Name\":\"x\",\"extra\":1}");
int res = flex.Extra.Count;
Console.WriteLine(res);
}
}
Результат выполнения кода:
1
Пример
Давайте прочитать известное свойство отдельно от словаря:
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
class Flex
{
public string Name { get; set; }
[JsonExtensionData]
public Dictionary<string, JsonElement> Extra { get; set; }
}
class Program
{
static void Main()
{
var flex = JsonSerializer.Deserialize<Flex>(
"{\"Name\":\"abcde\",\"extra\":1}");
string res = flex.Name;
Console.WriteLine(res);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте убедиться, что
Name не лежит в словаре:
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
class Flex
{
public string Name { get; set; }
[JsonExtensionData]
public Dictionary<string, JsonElement> Extra { get; set; }
}
class Program
{
static void Main()
{
var flex = JsonSerializer.Deserialize<Flex>(
"{\"Name\":\"x\",\"extra\":1}");
bool res = !flex.Extra.ContainsKey("Name");
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Смотрите также
-
JsonPropertyName,
имя в JSON -
JsonIgnore,
не писать поле -
JsonRequired,
поле обязательно -
JsonSerializable,
генератор на компиляции