Я хочу создать десериализатор JSON, который возвращает определенный тип.
JSON может быть в формате, который соответствует SpecificOne илиSpecificTwo. Мы знаем это только во время выполнения. После десериализации мне нужно извлечь поля и значения в форме класса Response.
Можем ли мы создать собственный десериализатор, который будет извлекать поля и значения?
var resp = JsonSerializer.Deserialize(json);
Также как-то избегайте использования отражения.
Результат должен выглядеть так:
{
"FieldName": "Address",
"FieldValue": "Some Address"
}
using System.Reflection;
using System.Text.Json;
using System.Text.Json.Serialization;
class Program
{
public static void Main(string[] args)
{
string json = """
{
"Id" : 1,
"Details": {
"$type": "AddressChange",
"Address": "Some Address"
}
}
""";
MyClass obj = JsonSerializer.Deserialize(json);
List fields = [];
var details = obj.Details;
Type type = details.GetType();
foreach (PropertyInfo prop in type.GetProperties())
{
object? value = prop.GetValue(details);
if (value is not null)
{
fields.Add(new Response
{
FieldName = prop.Name,
FieldValue = value.ToString() ?? string.Empty
});
}
}
}
public class MyClass
{
public int Id { get; set; }
public Parent Details { get; set; }
}
[JsonPolymorphic(TypeDiscriminatorPropertyName = "$type")]
[JsonDerivedType(typeof(SpecificOne), "AddressChange")]
[JsonDerivedType(typeof(SpecificTwo), "NameChange")]
public abstract class Parent
{
}
public class SpecificOne : Parent
{
public string Address { get; set; }
}
public class SpecificTwo : Parent
{
public string Name { get; set; }
}
public class Response
{
public string FieldName { get; set; }
public string FieldValue { get; set; }
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... and-the-va
Как создать собственный десериализатор json, который возвращает имя поля и значения из динамического json [дубликат] ⇐ C#
Место общения программистов C#
1765987700
Anonymous
Я хочу создать десериализатор JSON, который возвращает определенный тип.
JSON может быть в формате, который соответствует SpecificOne илиSpecificTwo. Мы знаем это только во время выполнения. После десериализации мне нужно извлечь поля и значения в форме класса Response.
Можем ли мы создать собственный десериализатор, который будет извлекать поля и значения?
var resp = JsonSerializer.Deserialize(json);
Также как-то избегайте использования отражения.
Результат должен выглядеть так:
{
"FieldName": "Address",
"FieldValue": "Some Address"
}
using System.Reflection;
using System.Text.Json;
using System.Text.Json.Serialization;
class Program
{
public static void Main(string[] args)
{
string json = """
{
"Id" : 1,
"Details": {
"$type": "AddressChange",
"Address": "Some Address"
}
}
""";
MyClass obj = JsonSerializer.Deserialize(json);
List fields = [];
var details = obj.Details;
Type type = details.GetType();
foreach (PropertyInfo prop in type.GetProperties())
{
object? value = prop.GetValue(details);
if (value is not null)
{
fields.Add(new Response
{
FieldName = prop.Name,
FieldValue = value.ToString() ?? string.Empty
});
}
}
}
public class MyClass
{
public int Id { get; set; }
public Parent Details { get; set; }
}
[JsonPolymorphic(TypeDiscriminatorPropertyName = "$type")]
[JsonDerivedType(typeof(SpecificOne), "AddressChange")]
[JsonDerivedType(typeof(SpecificTwo), "NameChange")]
public abstract class Parent
{
}
public class SpecificOne : Parent
{
public string Address { get; set; }
}
public class SpecificTwo : Parent
{
public string Name { get; set; }
}
public class Response
{
public string FieldName { get; set; }
public string FieldValue { get; set; }
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79849080/how-to-create-a-custom-json-deserializer-that-returns-the-fields-name-and-the-va[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия