强制WCF XML序列化器包含空字符串

本文关键字:包含空 字符串 序列化 WCF XML 强制 | 更新日期: 2023-09-27 17:52:36

我在WCF服务返回的struct中具有以下属性:

[XmlAttribute]
public string BATCHID;  

在BATCHID的值为空字符串的情况下,序列化将从结果XML中排除该属性,就好像它从一开始就没有包含在对象中一样。如何强制序列化器始终包含此属性,即使它是空字符串?

编辑:我使用的是基础XML序列化器,而不是DataContract序列化器,所以EmitDefaultValues不是一个选项。

强制WCF XML序列化器包含空字符串

尝试使用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 />