c# - 将字符串属性序列化为属性,即使字符串为空

标签 c# xml-serialization

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>

如何强制序列化程序创建一个空属性而不是将其遗漏?

编辑:

原来我是个白痴并创建了一个包含错误的示例,因为我想简化示例的代码。

如果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>

关于c# - 将字符串属性序列化为属性,即使字符串为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5835102/

相关文章:

c# - 用于序列化的 XML 类生成器

c# - 我可以先对数据库使用覆盖 OnModelCreating 方法吗

c# - 使用远程验证的多字段验证

c# - 将数组从 vba 传递到 c# 时,数据类型不匹配在哪里?

C# 列表到数组问题

c# - 以编程方式在 c# 中添加 [XmlIgnore] 属性以进行序列化

c# - XML 序列化 - .NET 4.0 中的不同结果

c# - 在使用 XmlAttributeOverrides 时,如何以编程方式生成像 XmlSerializer 那样的序列化程序集或 cs 文件?

c# - 组合或连接从单独的 XML 文件中读取的对象的最有效方法

c# - 当可以是 XElement 或 XAttribute 时如何转换 XPathEvalute?