gpt4 book ai didi

C# XmL 序列化 - 将项目设置为属性仅在 XML 中显示整数

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:58 24 4
gpt4 key购买 nike

我有一个充满建筑对象的列表,我想将它序列化为一个 XML 文件。基本序列化工作正常,但将值转换为属性以提高可读性却奇怪地失败了,除了 int 值。

这是我正在使用的应该被序列化的构建类:

    public class building
{
[XmlAttribute]
public string strName { set; get; } //name
[XmlAttribute]
public int intCount { set; get; } //count of building
[XmlAttribute]
public int intCost { set; get; } //running cost of building
[XmlAttribute]
public string strProd { set; get; } //product
[XmlAttribute)]
public string strRes1 { set; get; } //first ressource required
[XmlAttribute]
public string strRes2 { set; get; } //second ressource required
[XmlAttribute]
public int intTime { set; get; } //time to build in seconds
}

如果我省略 [XMLAttribute] 标签,则 XML 文件输出组如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfBuilding xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<building>
<strName>Holzfäller</strName>
<strKind>Produktion</strKind>
<intCost>2</intCost>
<strProd>Holz</strProd>
<strRes1 />
<strRes2 />
<intTime>105</intTime>
</building>

据说很好,只是很难对文件中超过 50 座建筑物进行概览。使用上述代码创建的 XML 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfBuilding xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<building intCount="0" intCost="0" intTime="0" />
<building intCount="0" intCost="0" intTime="0" />

如您所见,仅添加了 int 值,即使是 FALSE。所有值都设置为零。奇怪的是,如果我在创建列表后更新程序中的一个值,则更改也会反射(reflect)在 XML 中。只是基本值似乎被忽略/更改为零。

编辑:我也试过像这样设置数据类型:

[XmlAttribute(DataType = "string")]

但这也只会让字符串变得糟糕,根本不显示。

有点迷失在这一点上。如果我只是将属性内容排除在外,一切正常,所以我至少可以确定我的其余代码不会引起任何问题。但为什么 XMLSerializer 会忽略字符串对象属性并重置所有 int 值?我该如何更改?

抱歉,如果在其他地方有人问过这个问题,我找不到合适的词来让谷歌解决我的问题。主要是因为我不明白这里发生了什么,也不知道从哪里开始。我找到的文档只是展示了我在做什么,声称它会起作用。但它并不明显:-(

最佳答案

您的 string 为 null,因此它们不是用序列化编写的。

building 的默认构造函数中将您的字符串字段初始化为 string.Empty,它们将出现在输出中。

我在 building 中用这个构造函数测试了它:

public building()
{
strProd = "";
}

输出:

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfBuilding xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<building intCount="0" intCost="0" strProd="" intTime="0" />
<building intCount="0" intCost="0" strProd="" intTime="0" />
</ArrayOfBuilding>

为什么行为在属性上不同?

Xml 能够通过省略内容来显示元素中可为空的类型。但是,属性不能显示可空值 以区别于空字符串。因此,该属性被完全省略。

关于C# XmL 序列化 - 将项目设置为属性仅在 XML 中显示整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19512109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com