我在WCF服务返回的struct
中有以下属性:
[XmlAttribute]
public string BATCHID;
如果BATCHID的值是空字符串,则序列化会从生成的XML中排除该属性,就好像它从未包含在对象中一样。如何强制序列化程序始终包含此属性,即使它是空字符串?
编辑:我使用的是基本XML序列化程序而不是DataContract序列化程序,因此EmitDefaultValues不是一个选项。
答案 0 :(得分:2)
尝试将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;
}
}
答案 1 :(得分:-1)
我正在从VS2010中的vb.net代码序列化XML字符串
如果在课程定义中我有:
<XmlElement("XML_LogonMechanism", IsNullable:=True)> Public LogonMechanism As String
然后输出如下:
<XML_LogonMechanism xsi:nil="true" />
如果,在代码中,我设置
myClass.LogonMechanism = ""
然后输出包括:
<XML_LogonMechanism />