序列化XML响应后,对象为空数组

问题描述

我有一个XML响应作为wcf soap Web服务,例如波纹管:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
   <env:Header/>
   <env:Body>
      <ws:getSubjectFieldsByNameResponse xmlns:ws="https://localhost:8443/ira/ws">
         <return xmlns:ns2="https://localhost:8443/ira/ws">
            <item>
               <subjectDnField>DN_PKIX_COMMONNAME</subjectDnField>
               <defaultValue/>
               <isrequired>true</isrequired>
               <isModifiable>true</isModifiable>
            </item>
            <item>
               <subjectDnField>DN_PKIX_SERIALNUMBER</subjectDnField>
               <defaultValue/>
               <isrequired>true</isrequired>
               <isModifiable>true</isModifiable>
            </item>
         </return>
      </ws:getSubjectFieldsByNameResponse>
   </env:Body>
</env:Envelope>  

我使用以下响应类来解析此xml文件的正文:

[MessageContractAttribute(WrapperName = "getSubjectFieldsByNameResponse",WrapperNamespace = "https://localhost:8443/ira/ws",IsWrapped = true)]
public partial class getSubjectFieldsByNameResponse
{

    [MessageBodyMemberAttribute(Namespace = "",Order = 0)]
    [XmlArrayItemAttribute("return",Namespace = "",Form = XmlSchemaForm.Unqualified,IsNullable = false)]
    public SubjectItem[] items;

    public getSubjectFieldsByNameResponse()
    {
    }

    public getSubjectFieldsByNameResponse(SubjectItem[] items)
    {
        this.items = items;
    }
}

[XmlTypeAttribute]
public partial class SubjectItem
{
    [XmlElementAttribute(Form = XmlSchemaForm.Unqualified,Order = 0)]
    public string subjectDnField { get; set; }

    [XmlElementAttribute(Form = XmlSchemaForm.Unqualified,Order = 1)]
    public string defaultValue { get; set; }

    [XmlElementAttribute(Form = XmlSchemaForm.Unqualified,Order=2)]
    public string value { get; set; }

    [XmlElementAttribute(Form = XmlSchemaForm.Unqualified,Order=3)]
    public bool isrequired { get; set; }

    [XmlElementAttribute(Form = XmlSchemaForm.Unqualified,Order=4)]
    public bool isModifiable { get; set; }
}  

但是最终结果始终是SubjectItem的空数组,我尝试更改一些XML属性但没有运气。我应该在响应类中进行哪些更改才能获得预期的结果?

解决方法

在Visual Studio中,您可以通过以下方式简单地从XML生成c#类:

  • 在VS中打开.cs文件
  • 从顶部的“编辑”菜单中,选择“选择性粘贴”->“将XML粘贴为类” Paste XML As Classes