首页 > 解决方案 > 在 WCF XML 序列化中创建自定义肥皂对象

问题描述

我正在尝试通过 XML 序列化从 WCF 创建一个 SOAP 对象,因为面临的问题是某些序列化不符合我的预期输出。我想创建一个相同的 WSDL 文件来支持我的老客户。

这就是我收到的肥皂请求:

<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <areStatusComplete xmlns="http://tempuri.org/">
      <listIds>
        <string>12258</string>
        <string>478526</string>
      </listIds>
    </areStatusComplete>
  </s:Body>

预期输出为:

 <soap:Body>
    <ns1:areStatusComplete xmlns:ns1="http://tempuri.org/">
      <listIds>88355</listIds>
      <listIds>88356</listIds>
    </ns1:areStatusComplete>
  </soap:Body>

数据合约的 C# 代码是:

[System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.7.2612.0")]
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "")]
    [System.ServiceModel.MessageContractAttribute(WrapperName = "areStatusComplete", WrapperNamespace = "", IsWrapped = true)]
    public class areStatusComplete
    {
        [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "", Order = 0)]
        [System.Xml.Serialization.XmlElementAttribute("listIds", Form = System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable = true, Order = 1)]
        public string[] listIds { get; set; }


        [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "", Order = 1)]
        [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string system;

        [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "", Order = 2)]
        [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string user;

        public areStatusComplete ()
        {
        }

        public areStatusComplete (string[] listIds, string system, string user)
        {
            this.listIds = listIds;
            this.system = system;
            this.user = user;
        }
    }

服务合同代码:

[OperationContract]
        areStatusCompleteResponse areStatusComplete (string[] listIds, string system, string user);

标签: c#.netwcfsoapxml-serialization

解决方案


让我们知道确切的错误信息。据我所见,它期望一个 listIds 数组需要创建一个名为 listids 的自定义 C# 类,并且它需要是 areStatusComplete 类的内部属性

public class areStatusComplete 
{
  public ListIds listIds {..}

}

推荐阅读