XmlAttribute/XmlText不能用于编码复杂类型

Con*_*d C 1 .net c# xml serialization xml-serialization

我想将一个类序列Ticket化为xml.我得到错误:"XmlAttribute/XmlText不能用于编码复杂类型"因为我的自定义类.

这就是自定义域的xml应该是这样的(属性数组是nesseray但我不明白如何创建它):

<custom_fields type="array">
<custom_field name="Standby Reason" id="6">
<value/>
</custom_field>
<custom_field name="Close Date" id="84">
Run Code Online (Sandbox Code Playgroud)

班级门票

public class Ticket
{
    [XmlElement("custom_fields")]
    public CustomFields Custom_fields { get; set; }
Run Code Online (Sandbox Code Playgroud)

类CustomFields

[Serializable]
public class CustomFields
{
    [XmlAttribute("array")]
    public List<CustomField> custom_field { get; set; }
Run Code Online (Sandbox Code Playgroud)

类CustomField

[Serializable]
public class CustomField
{
    [XmlIgnore]
    public string Name { get; set; }

    [XmlElement]
    public int Id { get; set; }

    [XmlElement]
    public string Value { get; set; }
Run Code Online (Sandbox Code Playgroud)

序列化方法

public string Serialize(object obj)
{
    var nsSerializer = new XmlSerializerNamespaces();
    nsSerializer.Add(String.Empty, String.Empty);

    var serializer = new XmlSerializer(typeof(Ticket), String.Empty);

    using (StringWriter writer = new StringWriter())
    {
        ExtendedXmlTextWriter xmlTextWriter = new ExtendedXmlTextWriter(writer);
        serializer.Serialize(xmlTextWriter, obj, nsSerializer);

        //return writer.ToString();

        XElement root = new XElement("custom_fields", new XAttribute("type", "array"),
            new XElement("custom_field",
                new XAttribute("name", "Standby Reason"),
                new XAttribute("id", 6)
                ), new XElement("value"),
                    new XElement("custom_field",
                        new XAttribute("name", "Close Date"),
                        new XAttribute("id", 84)
                        )
                        );

        return (writer.ToString() + root.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

L.B*_*L.B 5

有时Linq To Xml会非常有帮助

XElement root = new XElement("ticket",
                        new XElement("custom_fields",
                            new XAttribute("type", "array"),
                            new XElement("custom_field",
                                new XAttribute("name", "Standby Reason"),
                                new XAttribute("id", 6)
                            ),
                            new XElement("value"),
                            new XElement("custom_field",
                                new XAttribute("name", "Close Date"),
                                new XAttribute("id", 84)
                            )
                        )
                );

string xml = root.ToString();
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

<ticket>
  <custom_fields type="array">
    <custom_field name="Standby Reason" id="6" />
    <value />
    <custom_field name="Close Date" id="84" />
  </custom_fields>
</ticket>
Run Code Online (Sandbox Code Playgroud)