Это на самом деле было очень полезно для меня, спасибо

оложим, у меня есть этот объект:

[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 для типов значений Nullable. Когда такие типы имеют нулевую ссылку nullNothingnullptra (Nothing в Visual Basic), они будут сериализованы путем установки xsi: nil в значение true.

источник:http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute.isnullable.aspx

Я понимаю, что тип значения не может быть установлен в нуль. Значение типа всегда установлено на что-то. Сериализация не может принять решение о сериализации или нет, основываясь на ее текущем значении.

Я попробовал с атрибутами, но это не сработало. Я пытался создать объект agecontainer и управлять его сериализацией с помощью атрибутов, но это не сработало.

Что я действительно хочу это:

<MyClass>
    <MyClassB>
        <RandomNumber>4234</RandomNumber>
    </MyClassB>
</MyClass>

Когда свойство Age ниже 0 (ноль).

Похоже, вам придется реализовать пользовательскую сериализацию.

Да, это то, что я тоже, но я хотел бы обойтись без этого.

В приложении объект намного сложнее, и я не хотел бы сам обрабатывать сериализацию.

Ответы на вопрос(6)

Ваш ответ на вопрос