将对象序列化为XML时出现意外结果

时间:2015-10-07 15:02:58

标签: c# xml xml-deserialization

我在创建下面的架构时遇到问题......

<DocumentProperties>
    <Document>
        <Properties>
            <propertyName>CNumber</propertyName>
            <propertyValue>00645007803</propertyValue>
        </Properties>
        <targetFolder>\12345678\00645007803\</targetFolder>  
    </Document>
    <Document>
        <Properties>
            <propertyName>CNumber</propertyName>
            <propertyValue>00645007804</propertyValue> 
        </Properties>
        <targetFolder>\12345678\00645007804\</targetFolder>
    </Document>
</DocumentProperties>

我创建了以下类来执行此操作

public class DocumentProperties
{

   public DocumentProperties()
   {
       Document = new List<Document>();
   }

   public List<Document> Document { get; set; }
}

public class Document
{
     public Document()
     {
         Properties = new List<Properties>();
     }

     public List<Properties> Properties { get; set; }
     public string targetFolder { get; set; }
}

public class Properties
{
    public string propertyName { get; set; }
    public string propertyValue { get; set; }
}

public class RetrieveMultipleDocumentsRequest
{
    public SystemProperty SystemProperty { get; set; }
    public RequestProperty RequestProperty { get; set; }
      public DocumentProperties DocumentProperties { get; set; }
}

我得到的输出是&#34; Document&#34;和&#34;属性&#34;两次作为父母的孩子。我该如何解决这个问题?

我班级的输出

 <DocumentProperties>
    <Document>
      <Document>
        <Properties>
          <Properties>
            <propertyName>DizzzyGelespe</propertyName>
            <propertyValue>8E077A60</propertyValue>
          </Properties>
          <Properties />
        </Properties>
        <targetFolder>C:\BXml\TargetFolder\</targetFolder>
      </Document>
    </Document>
  </DocumentProperties>

生成输出的代码:

public string Serialize(RetrieveMultipleDocumentsRequest details)
{
    XmlSerializer serializer = new XmlSerializer(typeof(RetrieveMultipleDocumentsRequest));

    using(StringWriter textWriter = new StringWriter())
    {
        serializer.Serialize(textWriter, details);
        return textWriter.ToString();
    }
}

2 个答案:

答案 0 :(得分:1)

显然,您的命名约定使XML序列化程序有点混淆。只需明确地装饰下面的元素,它应该工作正常:

public class DocumentProperties
{
    public DocumentProperties()
    {
        Document = new List<Document>();
    }

    [XmlElement("Document")]
    public List<Document> Document { get; set; }
}

public class Document
{
    public Document()
    {
        Properties = new List<Properties>();
    }

    [XmlElement("Properties")]
    public List<Properties> Properties { get; set; }
    public string targetFolder { get; set; }
}

答案 1 :(得分:0)

这里的问题在于命名。

文档列表应该称为“文档”而不是“文档”,属性也是如此。

如果您进行这些命名更改,那么您将看到您的XML输出正确且有意义。