Да, вы можете. Вы должны получить класс из JsonConverter
и переопределить метод CanConvert
, чтобы указать, что вы можете преобразовать тип Client
.
Затем вы должны переопределить методы ReadJson
и WriteJson
для чтения и записи полей литерала JSON.
Для такого литерала JSON более вероятно, что вам потребуется создать JsonConverter
для типа Case
, так как вам потребуется кэшировать все свойства объекта Client
во время сериализации, пока вы не получите достаточно информации для создания экземпляра Client
.
Затем вы вызываете метод Add
для экземпляра JsonConverterCollection
, предоставляемого свойством Converters
для экземпляра JsonSerializer
вы используете для выполнения сериализации / десериализации.
Обратите внимание, что если вам нужно сделать это для ряда различных классов, которые могут быть представлены таким образом, то вы можете написать одну JsonConverter
реализацию и заставить ее сканировать атрибут в имущество. Если свойство имеет атрибут и предоставляет другой объект со свойствами, оно будет ожидать чтения / записи точечной нотации.
Следует отметить, что, хотя вы используете точечную нотацию для идентификатора, это очень редко случается. Если возможно, на стороне, которая создает литерал JSON, он должен делать это следующим образом:
{
CaseName: "John Doe v. State",
CaseDate: "<some date>",
Client:
{
FirstName: "John",
LastName: "Doe",
Email: "johndoe@gmail.com"
}
}
Но это предполагает, что у вас есть контроль над этим концом. Если вы этого не сделаете, то мало что можете сделать.
Если у вас есть контроль, то построение литералов JSON таким образом устранит необходимость в пользовательской реализации JsonConverter
.