基于c#中的模型类创建XML列表

时间:2012-06-12 08:25:01

标签: c# xml-serialization

Hai所有我想创建一个格式为

的XML文件
<myFiles>
<name>myname</name>
<place>myplace</place>
<mydata>
    <today>1-1-2011</today>
    <time>1 PM</time>
    <driving>
       <car>audi</car>
       <bus>volvo</bus>
    </driving>
</mydata>
<mydata>
    <today>1-1-2011</today>
    <time>1 PM</time>
    <driving>
      <car>audi</car>
      <bus>volvo</bus>             
    </driving>
</mydata>
</myFiles>

为了创建这个我正在使用

class myfile
{
public string name {get;set;}
public string place {get;set;}
public list<mydata> mydata {get;set;}
}

然后也是     公共克拉米达塔     {     ......     } 来自我正在使用的XML构建

static public void SerializeToXMLList(List<Movie> movies)
{
XmlSerializer serializer = new XmlSerializer(typeof(List<Movie>));
TextWriter textWriter = new StreamWriter(@"C:\movie.xml");
serializer.Serialize(textWriter, movies);
textWriter.Close();
}

但它会给我输出像

<myFiles>
<name>myname</name>
<place>myplace</place>
<mydata>
   <mydata>
   <today>1-1-2011</today>
   <time>1 PM</time>
   <driving>
     <car>audi</car>
     <bus>volvo</bus>
   </driving>
   </mydata>
   <mydata>
   <today>1-1-2011</today>
   <time>1 PM</time>
   <driving>
      <car>audi</car>
      <bus>volvo</bus>
   </driving>
</mydata>
</mydata>
</myFiles>

所以在mydata列表中有一个列表,其中包含类名

我怎样才能避免......如果有任何人知道帮助我......

2 个答案:

答案 0 :(得分:2)

原因是你有一个名为'mydata'的属性,其中的对象是'mydata'类型。

在这样的元素中包含一个数组实际上是一个好习惯,所以说实话我觉得你得到的布局更好,尽管你应该为这个属性选择一个更好的名字,比如'mydatacollection'或' mydatalist”。

但是,此处有关于可用于控制序列化的属性的更多信息:http://msdn.microsoft.com/en-us/library/2baksw0z%28v=vs.80%29.aspx#Y570

@Totero发布了关于此主题的另一个好问题的链接,如果你真的想这样做的话。

答案 1 :(得分:1)

它创建嵌套容器的原因是你有一个mydata对象的数组mydata。

<mydata>
   <mydata>
   ....
   </mydata>
</mydata>

是表示这种情况的正确方法。以所需格式获取文件的最快方法是将数组重命名为“EraseTag”。将XML文件作为文本文件打开,并删除"<EraseTag>"

的所有实例

但是我想重申你给出的第二个序列化示例是正确的,因此可以通过反序列化将其恢复为对象形式。

如果您希望将这些标记保留在序列化阶段之外,那么您需要查看以下帖子:

XML Deserialization and Loose Array Items

并在您的课程周围添加[Serializable]标记。