我的 XML 序列化程序有一个奇怪的行为。
在读取 XML 并将其反序列化为对象后,所有属性都设置为其默认值,而不是 xml 文件中声明的值。
序列化程序不会抛出异常并正常运行。xml 文件格式正确并适合类结构。
任何人都知道这是怎么回事,或者我怎么能找到问题的根源?
谢谢
编辑:我没有告诉你整个故事。问题是,我得到的 XML 来自另一个组件。我能够反序列化 XML 文件,现在我得到了不同的格式。由于该文件大约有 3000 行,我无法发布整个代码。但这里有区别:可
反序列化:
<?xml version="1.0" encoding="utf-8"?>
<rootElem xmlns:cfg="namespace1" xmlns:office="namespace2" xmlns="namespace3">
<Prop1 xmlns="">6</Prop1>
<Prop2 xmlns="">string</Prop2>
</rootElem>
不可反序列化
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rootElem xmlns:cfg="namespace1" xmlns:office="namespace2" xmlns="namespace3">
<Prop1>6</Prop1>
<Prop2>string</Prop2>
</rootElem>
我真的不明白为什么我可以解组第一个示例,因为每个元素中都有 xmlns 标记,为什么我不能解组第二个示例......
edit2:刚刚意识到只有顶级元素有这些奇怪的 xmlns="" 属性。但是 C# 类声明与所有其他类没有什么不同……这很奇怪。
C# 类是这样的:
using namespace1;
namespace namespace3
{
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="namespace3")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="namespace3", IsNullable=true)]
public partial class rootElem: BaseObject
{
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public int Prop1
{
//...
}
}
}