当从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>
如果有人告诉我如何达到预期的结果,那将是伟大的。我需要在数据结构中做哪些改变?
您可以使用[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; }
}
}