将对象导出到c#中的xml文件

时间:2014-03-23 23:35:06

标签: c# xml

我尝试将对象列表(" Doctor"的类型)导出到c#中的xml文件中。 它编译并运行,但我得到的文件是不正确的。有人可以告诉我我做错了吗?


代码是:

  public static void exportAsXml(string fileName, List<Entity> ListOfEntity)
    {
        FileInfo file = new FileInfo(fileName + ".xml");
        StreamWriter sw = file.AppendText();
        System.Xml.Serialization.XmlSerializer writer = new System.Xml.Serialization.XmlSerializer(typeof(Doctor));
        foreach (Entity e in ListOfEntity)
        {
            writer.Serialize(sw,e as Doctor);
        }
        sw.Close();
    }

xml文件是:

<?xml version="1.0" encoding="utf-8"?>
<Doctor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <ID>87587579</ID>
    <FirstName>Dan</FirstName>
    <LastName>Adi</LastName>
    <Gender>male</Gender>
    <Salary>15000</Salary>
</Doctor><?xml version="1.0" encoding="utf-8"?>
<Doctor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <ID>302342246</ID>
    <FirstName>Lital</FirstName>
    <LastName>Gal</LastName>
    <Gender>female</Gender>
    <Salary>25600</Salary>
</Doctor><?xml version="1.0" encoding="utf-8"?>
<Doctor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <ID>205992457</ID>
    <FirstName>Yaron</FirstName>
    <LastName>Mor</LastName>
    <Gender>male</Gender>
    <Salary>10000</Salary>
</Doctor>

谢谢!

2 个答案:

答案 0 :(得分:3)

首先,生成的xml违反了2个核心规则。

  1. Xml文件应该只有一个<?xml version="1.0" encoding="utf-8">声明
  2. 所有xml都应该包含在一个根文件中。
  3. 换句话说,在循环中,您为每个项目生成一个单独的,完全成熟的xml文件。

    试试这个

    var writer = new System.Xml.Serialization.XmlSerializer(typeof(List<Doctor>));
    writer.Serialize(sw, ListOfEntity);
    

答案 1 :(得分:0)

您正在通过序列化医生对象并使用file.AppendText();将其保存到同一文件来破坏xml文件,从而生成包含多个<?xml version="1.0" encoding="utf-8"?>声明的损坏的xml。

您应序列化List<Doctor>,而不是单独序列化每位医生并通过附加文本修改xml文件。

如果要修改保存在文件中的序列化对象,则需要将文件反序列化为对象,修改它,然后用新的序列化对象替换该文件。你不能简单地追加它。

相关问题