0

我尝试生成如下 XML

<?xml version="1.0" encoding="UTF-8"?>
<movie>
<title><![CDATA[Con Air]]></title>
<plot><![CDATA[When the government puts all its rotten criminal eggs in one airborne basket, it's asking for trouble. Before you can say, "Pass the barf bag," the crooks control the plane, led by creepy Cyrus "The Virus" Grissom. Watching his every move is the just-released Cameron Poe, who'd rather reunite with his family. The action climaxes with an incredible crash sequence in Las Vegas.]]></plot>
<tagline><![CDATA[They were deadly on the ground; Now they have wings]]></tagline>
<year>1997</year>
<id>tt0118880</id>
<rating>65</rating>
<votes>93</votes>
<budget>75000000</budget>
<revenue>224012234</revenue>
<company><![CDATA[Touchstone Pictures]]></company>
<genre>
<name><![CDATA[Action]]></name>
<name><![CDATA[Adventure]]></name>
<name><![CDATA[Thriller]]></name>
</genre>
</movie>

我使用 C# XmlDocument 使用下面的可序列化类生成 XML 文件

[Serializable]
public class movie
{
    public movie()
    {
        this.genre = new Genre();
    }

    [XmlIgnore]
    public string title { get; set; }
    [XmlElement("title")]
    public XmlCDataSection titleCDATA
    {
        get { return new XmlDocument().CreateCDataSection(title); }
        set { title = value.Value; }
    }

    [XmlIgnore]
    public string plot { get; set; }
    [XmlElement("plot")]
    public XmlCDataSection plotCDATA
    {
        get { return new XmlDocument().CreateCDataSection(plot); }
        set { plot = value.Value; }
    }
    [XmlIgnore]
    public string tagline { get; set; }
    [XmlElement("tagline")]
    public XmlCDataSection taglineCDATA
    {
        get { return new XmlDocument().CreateCDataSection(tagline); }
        set { tagline = value.Value; }
    }
    public int year { get; set; }
    public string id { get; set; }
    public int rating { get; set; }
    public int votes { get; set; }
    public long budget { get; set; }
    public long revenue { get; set; }

    [XmlIgnore]
    public string company { get; set; }
    [XmlElement("company")]
    public XmlCDataSection companyCDATA
    {
        get { return new XmlDocument().CreateCDataSection(company); }
        set { company = value.Value; }
    }

    [XmlElement("genre")]
    public Genre genre { get; set; }


}

public class Genre
{
    public Genre()
    {
    }

    public string[] name { get; set; }
}

但输出不像预期的那样

<?xml version="1.0" encoding="utf-16"?>
<movie>
<title><![CDATA[Monster House]]></title>
<plot><![CDATA[Monsters under the bed are scary enough, but what happens when an entire house is out to get you? Three teens aim to find out when they go up against a decrepit neighboring home and unlock its frightening secrets.]]></plot>
<tagline><![CDATA[The House is . . . ALIVE!]]></tagline>
<year>2006</year>
<id>tt0385880</id>
<rating>57</rating>
<votes>74</votes>
<budget>0</budget>
<revenue>0</revenue>
<company><![CDATA[Sony Pictures Entertainment]]></company>
<genre>
<name>
<string>Adventure</string>
<string>Animation</string>
<string>Comedy</string>
<string>Fantasy</string>
<string>Mystery</string>
<string>Science Fiction</string>
<string>Family</string>
</name>
</genre>
</movie>

如何像第一个示例中的流派子节点一样创建子节点 xml?

4

1 回答 1

0

我认为您的元素名称称为“字符串”而不是“名称”的问题应该通过使用使用属性控制 XML 序列化中所涵盖的正确注释来解决。

您必须稍微修改一下您的类(我不确定您是否可以获得名称的 CDATA,但应该没问题):

public class Movie
{
  ....
  [XmlArray("genre")]
  [XmlArrayItem("Name")]
  public string[] Genre { get; set; }
}
于 2013-09-28T01:50:48.107 回答