【问题标题】:XML list creation based on a model class in c#c#中基于模型类的XML列表创建
【发布时间】:2012-06-12 17:24:51
【问题描述】:

嘿,我想创建一个具有以下格式的 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;}
}

然后也 公共 claa mydata { …… } 来自我正在使用的 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 列表中有一些带有类名的列表

我怎样才能避免这种情况...,如果有人知道请帮助我..

【问题讨论】:

    标签: c# xml-serialization


    【解决方案1】:

    原因是您有一个名为“mydata”的属性,其中的对象属于“mydata”类型。

    在这样的元素中包含数组实际上是一种好习惯,所以说实话,我认为您得到的布局更好,尽管您可能应该为属性选择更好的名称,例如“mydatacollection”或“我的数据列表”。

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

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

    【讨论】:

    • 是的,我同意你的看法,这是最好的方法。但我不能那样做。 [XmlArrayItem("mydaa")] 将再次创建相同的结果。但我想避免这种情况。有没有可能
    【解决方案2】:

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

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

    是表示这一点的正确方式。以您想要的确切格式获取文件的最快方法是将数组重命名为“EraseTag”之类的名称。将 XML 文件作为文本文件打开并删除所有 "&lt;EraseTag&gt;" 实例。

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

    如果您想将这些标签排除在序列化阶段之外,那么您需要查看以下帖子:

    XML Deserialization and Loose Array Items

    并在您的班级周围添加[Serializable] 标签。

    【讨论】:

    • 是的,我同意你的观点,但在创建时我需要 firstFormat 中的 XML(上面的第一个 Eg)。我想我正在使用列表,为什么在列表中创建单独的列表,但我怎样才能避免这种情况
    • 更新了答案。这个话题已经有另一个堆栈溢出项了。
    猜你喜欢
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多