强制WCF XML序列化器包含空字符串
本文关键字:包含空 字符串 序列化 WCF XML 强制 | 更新日期: 2023-09-27 17:52:36
我在WCF服务返回的struct
中具有以下属性:
[XmlAttribute]
public string BATCHID;
在BATCHID的值为空字符串的情况下,序列化将从结果XML中排除该属性,就好像它从一开始就没有包含在对象中一样。如何强制序列化器始终包含此属性,即使它是空字符串?
编辑:我使用的是基础XML序列化器,而不是DataContract序列化器,所以EmitDefaultValues不是一个选项。
尝试使用DataMemberAttribute与EmitDefaultValue = true
:
[XmlAttribute, DataMember(EmitDefaultValue=true)]
public string BATCHID_SCHED;
EmitDefaultValue
不能与xml序列化器一起使用。
我认为唯一的方法是实现IXmlSerializable
接口并手动序列化/反序列化类的所有字段/属性:
public class Test:IXmlSerializable
{
public string Prop;
public void WriteXml (XmlWriter writer)
{
writer.WriteAttributeString("Prop", Prop ?? "");
}
public void ReadXml (XmlReader reader)
{
if(reader.HasAttributes)
{
Prop = reader.GetAttribute("Prop");
}
}
public XmlSchema GetSchema()
{
return null;
}
}
我正在VS2010中序列化vb.net代码中的XML字符串
如果在类定义中我有:
<XmlElement("XML_LogonMechanism", IsNullable:=True)> Public LogonMechanism As String
则输出如下:
<XML_LogonMechanism xsi:nil="true" />
如果,在代码中,我设置
myClass.LogonMechanism = ""
则输出包括:
<XML_LogonMechanism />