我将我的枚举序列化为可以为空的枚举的问题。我想将枚举设为minoccurs = 0。
这是我的枚举:
public enum TestEnum
{
val_1= 0,
val_2 = 1,
val_3 = 2,
val_4 = 3
}
我尝试将序列化作为字符串或“spefified”标志进行序列化,但它仅用于布尔值。
所以最后我想得到像这样的xsd:
<element minOccurs="0" maxOccurs="1" name="TestEnum" type="TestEnum"/>
我总是得到minOccurs =“1”
答案 0 :(得分:0)
我不喜欢这个解决方案,但我找到了解决方法
public enum MyEnum
{
Val1,
Val2,
}
public class TestDefine
{
public string MyEnumPropSerialize
{
get
{
if (MyEnumProp.HasValue)
{
return MyEnumProp.ToString();
}
return null;
}
set
{
MyEnum importValue;
if (Enum.TryParse<MyEnum>(value, out importValue))
{
MyEnumProp = importValue;
}else
{
MyEnumProp.ToString();
}
}
}
[XmlIgnore]
public MyEnum? MyEnumProp { get; set; }
}
这个类,当你执行xsd.exe时创建这个xsd定义
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="TestDefine" nillable="true" type="TestDefine" />
<xs:complexType name="TestDefine">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="MyEnumPropSerialize" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
这是正确的XSD,但我已经插入了一个属性&#34;假的&#34;强制XSD生成器根据需要创建XSD。
我认为,如果XSD.exe生成器不符合您的要求,您需要自定义或手动创建XSD。之后,您可以在对象上实现IXmlSerializer方法,这样您就可以完全控制反序列化和XML解析