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};
这就是我得到的(注意时髦帽子上缺少颜色属性):
<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:
事实证明我是个白痴,创建了一个包含错误的示例,因为我想简化该示例的代码。
如果color的值为“”(或string.empty),那么它实际上被序列化为空属性。然而,我确实有一个空值,而不是一个空字符串 - 因此它被排除在外。
所以我想要的行为实际上已经是我创建的示例的行为。
对不起大家!
尝试使用List<Hat>
作为容器。使用这个:
var hats = new List<Hat>
{
new Hat { Name = "Cool Hat", Color = "Red" },
new Hat { Name = "Funky Hat", Color = string.Empty }
};
using (var stream = new FileStream("test.txt", FileMode.Truncate))
{
var serializer = new XmlSerializer(typeof(List<Hat>));
serializer.Serialize(stream, hats);
}
我明白了:
<?xml version="1.0"?>
<ArrayOfHat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Hat Color="Red">Cool Hat</Hat>
<Hat Color="">Funky Hat</Hat>
</ArrayOfHat>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)