强制WCF XML Serializer包含空字符串

时间:2014-03-24 14:50:57

标签: c# xml wcf

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

[XmlAttribute]
public string BATCHID;  

如果BATCHID的值是空字符串,则序列化会从生成的XML中排除该属性,就好像它从未包含在对象中一样。如何强制序列化程序始终包含此属性,即使它是空字符串?

编辑:我使用的是基本XML序列化程序而不是DataContract序列化程序,因此EmitDefaultValues不是一个选项。

2 个答案:

答案 0 :(得分:2)

尝试将DataMemberAttributeEmitDefaultValue = 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 />