C# 具有相同命名额外类型的XmlSerializer构造
嘿,我在构造一个XmlSerializer时遇到了麻烦,在这个XmlSerializer中,额外的类型包含具有相同名称(但唯一全名)的类型。下面是一个说明我的场景的示例 无法操作外部程序集中的类型定义: I类已编写并控制: XmlSerializer构造函数引发System.InvalidOperationException,并显示消息 “反映类型‘Engine.Status’时出错” 此异常具有System.InvalidOperationException类型的InnerException和with Message 类型“Wheel.Status”和“Engine.Status”都使用来自命名空间“”的XML类型名称“Status”。使用XML属性为该类型指定唯一的XML名称和/或命名空间C# 具有相同命名额外类型的XmlSerializer构造,c#,.net,xml-serialization,C#,.net,Xml Serialization,嘿,我在构造一个XmlSerializer时遇到了麻烦,在这个XmlSerializer中,额外的类型包含具有相同名称(但唯一全名)的类型。下面是一个说明我的场景的示例 无法操作外部程序集中的类型定义: I类已编写并控制: XmlSerializer构造函数引发System.InvalidOperationException,并显示消息 “反映类型‘Engine.Status’时出错” 此异常具有System.InvalidOperationException类型的InnerException和
鉴于我无法更改枚举类型,如何构造一个能够成功序列化Car的XmlSerializer?我注意到的第一件事是
Car.Status
不存在。你是说引擎状态
在任何情况下,如果这些枚举类型是以无法自动序列化的方式设计的,则必须手动序列化它们。可以通过在每个类上实现IXmlSerializable接口对其进行序列化,然后将得到3个方法
GetSchema()
ReadXml()
WriteXml()
在GetSchema方法中,只需将返回null
和WriteXml()方法中放入序列化对象时编写xml所需的代码,并在ReadXml()方法中放入从xml文件读取并在反序列化时重新创建对象所需的代码 尝试使用XmlElement属性:
public class Car
{
[XmlElement("WheelStatus")]
public Wheel.Status WheelStatus;
[XmlElement("EngineStatus")]
public Engine.Status EngineStatus;
...
}
更新:刚刚尝试了这个,在这种情况下似乎不起作用。您可以在变量“Status”的正上方添加一个[xmlement(Name=“WheelStatus”)]
,以避免该问题
这将强制将保存时的xml名称(以及加载时的预期名称)重命名为您在“name”中输入的任何字符串。但这也允许您保留变量名“status”
GetSchema()
ReadXml()
WriteXml()
public class Car
{
[XmlElement("WheelStatus")]
public Wheel.Status WheelStatus;
[XmlElement("EngineStatus")]
public Engine.Status EngineStatus;
...
}