Json.NET - предотвратить повторную сериализацию уже сериализованного свойства [duplicate]
На этот вопрос уже есть ответ здесь:
Newtonsoft Json сериализует класс, одним из свойств которого является JSON [duplicate] 2 ответаВ приложении ASP.NET Web API некоторые из моделей, с которыми я работаю, содержат кусок специального JSON, который полезен только на стороне клиента. На сервере он просто входит и выходит из реляционной базы данных в виде строки. Производительность является ключевым фактором, и кажется, что вообще бессмысленно обрабатывать строковый сервер JSON.
Итак, в C # представьте объект, подобный этому:
new Person
{
FirstName = "John",
LastName = "Smith",
Json = "{ \"Age\": 30 }"
};
По умолчанию Json.NET сериализует этот объект следующим образом:
{
"FirstName": "John",
"LastName": "Smith",
"Json": "{ \"Age\": 30 }"
}
Я хотел бы быть в состоянии поручить Json.NET предположить, чтоJson
свойство уже является сериализованным представлением, поэтому оно не должно повторно сериализоваться, и результирующий JSON должен выглядеть следующим образом:
{
"FirstName": "John",
"LastName": "Smith",
"Json": {
"Age": 30
}
}
В идеале это работает в обоих направлениях, то есть при размещении представления JSON оно автоматически десериализуется в представлении C # выше.
Каков наилучший механизм для достижения этого с Json.NET? Нужен ли кастомJsonConverter
? Существует ли более простой механизм на основе атрибутов? Эффективность имеет значение; весь смысл в том, чтобы пропустить издержки сериализации, которыемог быть немного микрооптимизацией, но ради аргумента давайте предположим, что это не так. (Потенциально будут большие списки с громоздкимиJson
свойства возвращаются.)