public class Hat
{
[XmlTextAttribute]
public string Name { get; set; }
[XmlAttribute("Color")]
public string Color { get; set; }
}
var hat1 = new Hat {Name="Cool Hat", Color="Red"};
var hat2 = new Hat {Name="Funky Hat", Color=null};
Это то, что я получаю (обратите внимание на отсутствующий атрибут цвета на Funky Hat):
<Hats>
<Hat Color="Red">Cool Hat</Hat>
<Hat>Funky Hat</Hat>
</Hats>
Это то, что я хочу:
<Hats>
<Hat Color="Red">Cool Hat</Hat>
<Hat Color="">Funky Hat</Hat>
</Hats>
Как я могу заставить сериализатор создать пустой атрибут вместо того, чтобы его оставить?
EDIT:
Оказывается, я идиот и создал пример, содержащий ошибку, потому что я хотел упростить код для примера.
Если значение цвета равно "" (или string.empty), оно фактически сериализуется как пустой атрибут. Тем не менее, у меня действительно было пустое значение, а не пустая строка, поэтому она была опущена.
Таким образом, поведение, которое я хотел, на самом деле было уже поведением примера, который я создал.
Извините, ребята!