当从XmlSerializer生成Xml时,如何控制Xml文档中字符串项数组的XmlElement名称

本文关键字:Xml 字符串 文档 名称 XmlElement 数组 生成 XmlSerializer 当从 何控制 控制 | 更新日期: 2023-09-27 18:05:10

我使用XmlSerializer类将对象序列化为xml文件并通过网络传输。我创建了下面的数据结构,它包含数据并通过网络传输。

 [Serializable]
 public class MailItem
{
    public string UniqueEmailId { get; set; }
    public string SenderEmailId { get; set; }
    public string[] ToRecipientEmailId { get; set; }
}

现在,当我转换到xml它发出以下结果-

<?xml version="1.0" encoding="utf-16"?>
<MailItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <UniqueEmailId>SomeUniqueID</UniqueEmailId>
  <SenderEmailId>sender@email.id</SenderEmailId>
  <ToRecipientEmailId>
    <string>To@email.id</string>
    <string>To1@email.id</string>
    <string>To2@email.id</string>
  </ToRecipientEmailId>  
</MailItem>

预期结果是(观察ToRecipientEmailId的子元素)-

<?xml version="1.0" encoding="utf-16"?>
<MailItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <UniqueEmailId>SomeUniqueID</UniqueEmailId>
  <SenderEmailId>sender@email.id</SenderEmailId>
  <ToRecipientEmailId>
    <EmailId>To@email.id</EmailId>
    <EmailId>To1@email.id</EmailId>
    <EmailId>To2@email.id</EmailId>
  </ToRecipientEmailId>  
</MailItem>

当我创建另一个类与Email和EmailId作为属性到它然后它给我以下结果-

[Serializable]
     public class MailItem
    {
        public string UniqueEmailId { get; set; }
        public string SenderEmailId { get; set; }
        public List<Email> ToRecipientEmailId { get; set; }
    }         
   public class Email
    {
        public string EmailID {get;set;}
    }
<?xml version="1.0" encoding="utf-16"?>
<MailItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <UniqueEmailId>SomeUniqueID</UniqueEmailId>
  <SenderEmailId>sender@email.id</SenderEmailId>
  <ToRecipientEmailId>
    <Email>
      <EmailID>To@email.id</EmailID>
    </Email>
    <Email>
      <EmailID>To1@email.id</EmailID>
    </Email>
    <Email>
      <EmailID>To2@email.id</EmailID>
    </Email>
  </ToRecipientEmailId> 
</MailItem>

如果有人告诉我如何达到预期的结果,那将是伟大的。我需要在数据结构中做哪些改变?

当从XmlSerializer生成Xml时,如何控制Xml文档中字符串项数组的XmlElement名称

您可以使用[XmlArrayItem(elementName)]属性指定数组条目所使用的元素名称:

public class MailItem
{
    public string UniqueEmailId { get; set; }
    public string SenderEmailId { get; set; }
    [XmlArrayItem("EmailId")]
    public string[] ToRecipientEmailId { get; set; }
}

注意,您不需要用于二进制序列化的[Serializable]属性。

试试这个。不要使用XmlArrayItem,它会创建一个额外的标签层

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
    [XmlRoot("MailItem")]
    public class MailItem
    {
        [XmlElement("UniqueEmailId")]
        public string UniqueEmailId { get; set; }
        [XmlElement("SenderEmailId")]
        public string SenderEmailId { get; set; }
        [XmlElement("ToRecipientEmailId")]
        public string[] ToRecipientEmailId { get; set; }
    }
}
​