System.Text.Json не поддерживает сериализацию поля . Функция запланирована на .NET 5.0.
Вы использовали открытые поля вместо общих свойств. Если бы вы пробовали со свойствами и точно таким же кодом:
struct CI {
public int Id {get;set;}
public string Name {get;set;}
public string Address {get;set;}
}
Вы получите ожидаемый объект обратно:
Id 1
Name Manas
Address India
Почему?
System.Text.JSON специально не предназначен для того, чтобы быть швейцарским десериализатором JSON, как JSON.NET. Основной вариант использования - быстрая сериализация DTO в сценарии HTTP API с минимальными выделениями, а DTO используют свойства.
Свойства - это не просто поля с геттерами и сеттерами, они являются частью интерфейса объекта. Поля, с другой стороны, рассматриваются как внутреннее состояние, даже если они являются общедоступными. Сериализаторы по умолчанию работают со свойствами , при этом сериализация полей является дополнительной функцией.
При этом значение кортежей . Теперь это фундаментальный тип, который использует поля для производительности и сокращенного копирования. Кортежи имеют свое место в DTO, но текущий System.Text.Json не может их обработать.
Работа уже ведется для этого , PR уже рассматривается, но целевая версия 5.0