Как исключить свойство из сериализации в System.Text.Json.JsonSerializer.Serialize() с помощью JsonConverterC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как исключить свойство из сериализации в System.Text.Json.JsonSerializer.Serialize() с помощью JsonConverter

Сообщение Anonymous »

Я хочу иметь возможность исключать свойство при сериализации с использованием System.Text.Json.JsonSerializer. Я не хочу использовать атрибут JsonIgnore везде, где хочу это сделать. Я хотел бы иметь возможность определять свойства, которые я хочу исключить во время сериализации, только через какой-то Fluent API, которого в настоящее время не существует.

Единственный вариант, который я могу сделать. смог найти, это определить JsonConverter и добавить его в список преобразователей в JsonSerializerOptions, который я передаю методу Serialize() следующим образом:

var options = new JsonSerializerOptions();
options.Converters.Add(new BookConverter());
json = JsonSerializer.Serialize(book, options);


В JsonConverter мне пришлось бы самому написать все представление JSON, используя Utf8JsonWriter, исключая свойство, которое я не хочу сериализовать. Это большая работа, чтобы просто исключить свойство. Хотя JsonConverter — отличная функция расширения от команды .NET, для моего варианта использования она слишком низкоуровневая. Кто-нибудь знает какой-либо другой способ добиться исключения свойства без необходимости самостоятельно писать представление JSON?

Я не хочу делать следующее :
  • Используйте атрибут или динамически добавляйте атрибут во время выполнения.
  • Измените модификатор доступа свойство на что-то вроде частного или защищенного
  • Используйте стороннюю библиотеку, так как мою проблему можно решить, если я использую Json.NET.
Пример:[*]Используйте стороннюю библиотеку, так как мою проблему можно решить, если я использую Json.NET.


Пример: р>

class Program
{
void Main()
{
// We want to serialize Book but to ignore the Author property
var book = new Book() { Id = 1, Name = "Calculus", Author = new Author() };

var json = JsonSerializer.Serialize(book);
// Default serialization, we get this:
// json = { "Id": 1, "Name": "Calculus", "Author": {} }

// Add our custom converter to options and pass it to the Serialize() method
var options = new JsonSerializerOptions();
options.Converters.Add(new BookConverter());
json = JsonSerializer.Serialize(book, options);
// I want to get this:
// json = { Id: 1, Name: "Calculus" }
}
}

public class Author { }

public class Book
{
public int Id { get; set; }
public string Name { get; set; }
public Author Author { get; set; }
}

public class BookConverter : JsonConverter
{
public override Book Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
// Use default implementation when deserializing (reading)
return JsonSerializer.Deserialize(ref reader, options);
}

public override void Write(Utf8JsonWriter writer, Book value, JsonSerializerOptions options)
{
// Serializing. Here we have to write the JSON representation ourselves
writer.WriteStartObject();

writer.WriteNumber("Id", value.Id);
writer.WriteString("Name", value.Name);
// Don't write Author so we can exclude it

writer.WriteEndObject();
}
}


Подробнее здесь: https://stackoverflow.com/questions/585 ... onserializ
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»