序列化可为 null 的枚举 wcf
Serialize nullable enum wcf
我在将我的枚举序列化为可为 null 的枚举时遇到问题。我想使用 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"
我不喜欢这个解决方案,但我找到了解决方法
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; }
}
这个class,当你执行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 但我插入了一个 属性 "fake" 来强制 XSD 生成器创建你想要的 XSD。
我认为如果 XSD.exe 生成器不满足您的要求,您需要自行自定义或手动创建 XSD。之后,您可以在对象上实现 IXmlSerializer 方法,这样您就可以完全控制反序列化和 XML 解析
我在将我的枚举序列化为可为 null 的枚举时遇到问题。我想使用 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"
我不喜欢这个解决方案,但我找到了解决方法
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; }
}
这个class,当你执行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 但我插入了一个 属性 "fake" 来强制 XSD 生成器创建你想要的 XSD。
我认为如果 XSD.exe 生成器不满足您的要求,您需要自行自定义或手动创建 XSD。之后,您可以在对象上实现 IXmlSerializer 方法,这样您就可以完全控制反序列化和 XML 解析