Предположим, что у меня есть этот объект:
[Serializable]
public class MyClass
{
public int Age { get; set; }
public int MyClassB { get; set; }
}
[Serializable]
public class MyClassB
{
public int RandomNumber { get; set; }
}
XmlSerializer сериализует объект следующим образом:
<MyClass>
<Age>0</age>
<MyClassB>
<RandomNumber>4234</RandomNumber>
</MyClassB>
</MyClass>
Как я могу присвоить свойство Age nullable? IE: не сериализовать свойство Age, когда оно находится под 0?
Я попытался с Nullable, но он сериализовал мой объект следующим образом:
<MyClass>
<Age d5p1:nil="true" />
<MyClassB>
<RandomNumber>4234</RandomNumber>
</MyClassB>
</MyClass>
Прочитав документацию MSDN, я нашел следующее:
Вы не можете применить свойство IsNullable к члену, введенному как тип значения, потому что тип значения не может содержать нулевую ссылку nullNothingnullptra (Nothing в Visual Basic). Кроме того, вы не можете установить для этого свойства значение false для типов значений с нулевым значением. Когда такие типы имеют нулевую ссылку nullNothingnullptra (Nothing в Visual Basic), они будут сериализованы, установив xsi: nil в true.
источник: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute.isnullable.aspx
Я понимаю, что тип значения не может иметь значение null. Тип valuetype всегда настроен на что-то. Сериализация не может принять решение о ее сериализации или нет на основе текущего значения.
Я пробовал с атрибутами, но это не сработало. Я попытался создать объект agecontainer и манипулировать его сериализацией с помощью атрибутов, но это не сработало.
Я действительно хочу:
<MyClass>
<MyClassB>
<RandomNumber>4234</RandomNumber>
</MyClassB>
</MyClass>
Когда свойство Age меньше 0 (ноль).
Похоже, вам придётся реализовать пользовательскую сериализацию.
Да, это то, что я тоже, но я бы хотел уйти без него.
В приложении объект намного сложнее, и я не хочу сам обрабатывать сериализацию.