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列表中有一个列表,其中包含类名
我怎样才能避免......如果有任何人知道帮助我......
答案 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]
标记。