C# 序列化产生错误格式的xml
我正在将对象列表序列化为xml。我得到了很大的帮助 经过一些定制,我得到了这个代码C# 序列化产生错误格式的xml,c#,xml-serialization,linq-to-xml,C#,Xml Serialization,Linq To Xml,我正在将对象列表序列化为xml。我得到了很大的帮助 经过一些定制,我得到了这个代码 private void button1_Click(object sender, EventArgs e) { PersonalList personen = new PersonalList(); // normal person Person normPerson = new Person();
private void button1_Click(object sender, EventArgs e)
{
PersonalList personen = new PersonalList();
// normal person
Person normPerson = new Person();
normPerson.Location = "Pune";
normPerson.ChangeFrequency = "weekly";
normPerson.LastModifiedDate = "2014-07-12";
personen.AddPerson(normPerson);
Type[] personTypes = { typeof(Person)};
XmlSerializer serializer = new XmlSerializer(typeof(PersonalList), personTypes);
FileStream fs = new FileStream("myxml.xml", FileMode.Create);
serializer.Serialize(fs, personen);
fs.Close();
personen = null;
// Deserialize
}
}
[XmlRoot("urlset")]
[XmlInclude(typeof(Person))] // include type class Person
public class PersonalList
{
[XmlArray("url")]
[XmlArrayItem("url")]
public List<Person> Persons = new List<Person>();
public void AddPerson(Person person)
{
Persons.Add(person);
}
}
[XmlType("Person")] // define Type
public class Person
{
[XmlElement("loc")]
public string Location { get; set; }
[XmlElement("changefreq")]
public string ChangeFrequency { get; set; }
[XmlElement("lastmod")]
public string LastModifiedDate { get; set; }
}
private void按钮1\u单击(对象发送者,事件参数e)
{
PersonalList personen=新建PersonalList();
//正常人
Person normPerson=新的Person();
normPerson.Location=“浦那”;
normPerson.ChangeFrequency=“每周”;
normPerson.LastModifiedDate=“2014-07-12”;
personen.AddPerson(normPerson);
Type[]personTypes={typeof(Person)};
XmlSerializer serializer=新的XmlSerializer(typeof(PersonalList),personTypes);
FileStream fs=newfilestream(“myxml.xml”,FileMode.Create);
serializer.Serialize(fs,personen);
fs.Close();
personen=null;
//反序列化
}
}
[XmlRoot(“urlset”)]
[xmlclude(typeof(Person))]//包含类型类Person
公开课个人名单
{
[XmlArray(“url”)]
[XmlArrayItem(“url”)]
公开名单人员=新名单();
公众人士(人)
{
人。添加(人);
}
}
[XmlType(“Person”)]//定义类型
公共阶层人士
{
[XmlElement(“loc”)]
公共字符串位置{get;set;}
[XmlElement(“changefreq”)]
公共字符串更改频率{get;set;}
[XmlElement(“lastmod”)]
公共字符串LastModifiedDate{get;set;}
}
这是产生结果的原因
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<url>
<url>
<loc>Pune</loc>
<changefreq>weekly</changefreq>
<lastmod>2014-07-12</lastmod>
</url>
</url>
</urlset>
浦那
每周的
2014-07-12
但我想要的结果是
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<url>
<loc>Pune</loc>
<changefreq>weekly</changefreq>
<lastmod>2014-07-12</lastmod>
</url>
</urlset>
浦那
每周的
2014-07-12
我不想要ArrayList的额外元素
我还需要在根元素上有这个名称空间,即我为根元素定义的名称空间
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
有什么帮助吗?通过此链接获得答案。是否有向根目录添加名称空间的解决方案?已尝试:
[XmlRoot(名称空间=”http://foo”)
谢谢它的工作,但我如何将xmlns:xsi=“”xsi:schemaLocation=“”添加到roots中StackOverflow的最佳用法是添加一个新问题。根节点上的名称空间覆盖等文档可在此处找到,并附有一个示例: