Есть legacy код (который нельзя менять и дополнять зависимостями) который использует местами бинарную сериализацию, местами XML. В новом проекте (который наследуюет и дополняет некоторые классы от старого) нужно сделать JSON сериализацию. Почему-то Newtonsoft
игнорирует аттрибут NonSerialized, в то же время добавить JsonIgnore нельзя, т.к. это потащит в старый код новые зависимости, да и вообще старый код мордовать не разрешают. Как заставить сериализатор адекватно реагировать на NonSerialized ?
Кусок старого кода:
[Serializable]
public class TrainCourse //: ISerializable
{
[NonSerialized]
protected PathElement element;
/* ... */
}
Здравствуйте, QuAzI, Вы писали:
QAI>Есть legacy код (который нельзя менять и дополнять зависимостями) который использует местами бинарную сериализацию, местами XML. В новом проекте (который наследуюет и дополняет некоторые классы от старого) нужно сделать JSON сериализацию. Почему-то Newtonsoft игнорирует аттрибут NonSerialized, в то же время добавить JsonIgnore нельзя, т.к. это потащит в старый код новые зависимости, да и вообще старый код мордовать не разрешают. Как заставить сериализатор адекватно реагировать на NonSerialized ?
QAI>Кусок старого кода:
QAI>QAI>[Serializable]
QAI>public class TrainCourse //: ISerializable
QAI>{
QAI> [NonSerialized]
QAI> protected PathElement element;
QAI> /* ... */
QAI>}
QAI>
Как вариант "в лоб" : в новом коде сделать обертку над старым классом и уже пользоваться аттрибутами newtonsoft'a.
Как вариант "запотеть" : сделать кастмоный конвертор
Custom JsonConverter
Здравствуйте, Klikujiskaaan, Вы писали:
K>Как вариант "запотеть" : сделать кастмоный конвертор Custom JsonConverter
Я бы таким путем пошел. Собственно, уже ходил -- для каких-то классов пришлось писать конвертер вручную.
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, Klikujiskaaan, Вы писали:
K>>Как вариант "запотеть" : сделать кастмоный конвертор Custom JsonConverter
S>Я бы таким путем пошел. Собственно, уже ходил -- для каких-то классов пришлось писать конвертер вручную.
Да, это самый гибкий вариант, как по мне.
Здравствуйте, QuAzI, Вы писали:
IList<JsonProperty> DefaultContractResolver.CreateProperties
отфильтровываете не нужные свойства