我从大量 XSD 中生成超过 100 个类,以构建我们的测试工具应用程序以进行内部测试。我使用 XSD.exe 来生成这些类,因为这样做会带来太大的风险,而且会花费太长时间。
我遇到了一个让我有点痛苦的问题。我正在尝试获取此枚举(目前只有这个枚举,然后我将对其余的枚举执行相同的技术...)
我想要的是生成这样的东西(其中接收者元素具有 typeCode 属性):
<receiver typeCode="RCV">
<device classCode="DEV" determinerCode="INSTANCE">
<id root="..." extension="..." />
<asAgent classCode="AGNT">
<representedOrganization classCode="ORG" determinerCode="INSTANCE">
<id root="..." extension="..." />
</representedOrganization>
</asAgent>
</device>
</receiver>
但是,接收器永远不会获取属性,即使我已在测试工具启动对象中明确设置:
this.receiver = new MCCI_MT000100BCReceiver();
this.receiver.typeCode = CommunicationFunctionType.RSP;
this.receiver.device = new MCCI_MT000100BCDevice();
我有一个枚举(我添加了 XMLEnums 和 [Flags] 属性,因为 XSD.exe 没有打扰)
[Flags]
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "urn:hl7-org:v3")]
public enum CommunicationFunctionType
{
/// <remarks/>
[System.Xml.Serialization.XmlEnum("RCV")]
RCV = 1,
/// <remarks/>
[System.Xml.Serialization.XmlEnum("RSP")]
RSP = 2,
/// <remarks/>
[System.Xml.Serialization.XmlEnum("SND")]
SND = 3,
}
这是使用该枚举的类之一:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(TypeName = "MCCI_MT000100BC.Receiver", Namespace = "urn:hl7-org:v3")]
public partial class MCCI_MT000100BCReceiver
{
private CS[] realmCodeField;
private II typeIdField;
private II[] templateIdField;
private MCCI_MT000100BCDevice deviceField;
private CommunicationFunctionType typeCodeField;
private bool typeCodeFieldSpecified;
public MCCI_MT000100BCReceiver()
{
this.typeCodeField = CommunicationFunctionType.RCV;
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("realmCode")]
public CS[] realmCode
{
get
{
return this.realmCodeField;
}
set
{
this.realmCodeField = value;
}
}
/// <remarks/>
public II typeId
{
get
{
return this.typeIdField;
}
set
{
this.typeIdField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("templateId")]
public II[] templateId
{
get
{
return this.templateIdField;
}
set
{
this.templateIdField = value;
}
}
/// <remarks/>
public MCCI_MT000100BCDevice device
{
get
{
return this.deviceField;
}
set
{
this.deviceField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public CommunicationFunctionType typeCode
{
get
{
return this.typeCodeField;
}
set
{
this.typeCodeField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool typeCodeSpecified
{
get
{
return this.typeCodeFieldSpecified;
}
set
{
this.typeCodeFieldSpecified = value;
}
}
}
我知道 .NET 有时不喜欢序列化枚举,但我们将不胜感激。
最佳答案
.net/XML中的枚举没有问题;问题只是您(或 xsd)添加了“typeCodeSpecified”成员。这是一个用于有条件地包含值的模式 - 具体来说,对于名为“Foo”的成员,引擎会检查“FooSpecified”属性或“ShouldSerializeFoo()”方法。由于您从未将“typeCodeSpecified”设置为 true,因此它将返回 false,并且该成员将在序列化过程中被省略。
如果您不希望这样,请删除该成员。
关于c# - 将枚举序列化为 XML 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7678619/