序列化对象中缺少的属性和元素

时间:2010-07-06 08:37:39

标签: c# xml wcf soap

我有一些生成的代理类,它们包含具有XMLAttribute属性的属性,例如

[System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.egem.nl/StUF/StUF0301")]
public Verwerkingssoort verwerkingssoort
{
    get
    {
        return this.verwerkingssoortField;
    }
    set
    {
        this.verwerkingssoortField = value;
    }
}

然而,此消息和其他几个属性未显示在SOAP消息中。代理是使用svcutil生成的。

当我写这个问题时,我注意到显示为属性的属性是字符串,而这是一个Enum(但我还没有进行彻底的检查)。有人知道这是否是问题,或者它可能是什么以及有什么可能的解决方案?

更新 经过一些检查后,我发现没有包含Enum作为属性,但是Strings和Bools工作正常。

更新2:simple case枚举中,属性被序列化就好了。

更新3: 如果我将XmlAttributeAttribute(...)替换为XmlIgnoreAttribute()并添加以下属性:

[System.Xml.Serialization.XmlAttributeAttribute("verwerkingssoort")]
public string verwerkingssoortString
{
    get
    {
        return this.verwerkingssoortField.ToString();
    }
    set
    {
        this.verwerkingssoortField = (Verwerkingssoort)System.Enum.Parse(typeof(Verwerkingssoort), value, true);
    }
}

它工作正常,但在生成的代码中进行这样的更改将是一个相当艰巨的任务,当合同发生变化时,我需要重新做一遍。所以我仍在寻找更好的解决方案。

更新4: 事实证明,这个问题不仅限于属性。我只是注意到也应该省略应该序列化为元素的属性。同样的事情适用:它是一个枚举,如果我把它改成一个字符串就可以正常工作。

谢谢,问候,

米尔。

1 个答案:

答案 0 :(得分:0)

您是否尝试将Type类的XmlAttributeAttribute属性设置为枚举类型?