哪个是使用c#序列化器将我的模型映射到XML文件的最佳方式。我的意思是,如果例如我选择一个反序列化的对象,我可以找到XML文件中的XML源文本。XML文件映射模型 - 如何在soucre XML文件中查找反序列化对象的位置。
2
A
回答
3
我为您准备了一份工作样本,您可以继续探索。
using System;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
using System.Collections.Generic;
using System.IO;
namespace ConsoleApplication5
{
public class Person
{
public int Age { get; set; }
public string Name { get; set; }
public int XMLLine { get; set; }
}
public class Persons : List<Person> { }
class Program
{
static void Main(string[] args)
{
//create your objects
Person p = new Person();
p.Age = 35;
p.Name = "Arnold";
Person p2 = new Person();
p2.Age = 36;
p2.Name = "Tom";
Persons ps = new Persons();
ps.Add(p);
ps.Add(p2);
//Serialize them to XML
XmlSerializer xs = new XmlSerializer(typeof(Persons));
XDocument d = new XDocument();
using (XmlWriter xw = d.CreateWriter())
xs.Serialize(xw, ps);
//print xml
//System.Diagnostics.Debug.WriteLine(d.ToString());
// it will produce following xml. You can save it to file.
//I have saved it to variable xml for demo
string xml = @"<ArrayOfPerson>
<Person>
<Age>35</Age>
<Name>Arnold</Name>
<XMLLine>0</XMLLine>
</Person>
<Person>
<Age>36</Age>
<Name>Tom</Name>
<XMLLine>0</XMLLine>
</Person>
</ArrayOfPerson>";
XDocument xdoc = XDocument.Parse(xml, LoadOptions.SetLineInfo);
// A little trick to get xml line
xdoc.Descendants("Person").All(a => { a.SetElementValue("XMLLine", ((IXmlLineInfo)a).HasLineInfo() ? ((IXmlLineInfo)a).LineNumber : -1); return true; });
//deserialize back to object
Persons pplz = xs.Deserialize((xdoc.CreateReader())) as Persons;
pplz.All(a => { Console.WriteLine(string.Format("Name {0} ,Age{1} ,Line number of object in XML File {2}", a.Name, a.Age, a.XMLLine)); return true; });
Console.ReadLine();
}
}
}
,它会给你的结果一样
名称阿诺德,Age35,在XML文件对象的行号2
名称汤姆,Age36,在XML文件7对象的行号
+1
谢谢。这正是我正在寻找的:)。 – AlexTheo 2011-12-23 11:27:14
+0
使用d.Root.RemoveAttributes();之后xs.Serialize(xw,ps);从根节点删除所有属性。 – Thulasiram 2014-10-28 10:48:17
0
你可以试试这个扩展方法:
public static string ToXml<T>(this object obj)
{
using (var memoryStream = new MemoryStream())
{
using (TextWriter streamWriter = new StreamWriter(memoryStream))
{
var xmlSerializer = new XmlSerializer(typeof(T));
xmlSerializer.Serialize(streamWriter, obj);
return Encoding.ASCII.GetString(memoryStream.ToArray());
}
}
}
public static void ToXmlFile<T>(this object obj, string fileName)
{
using (TextWriter streamWriter = new StreamWriter(fileName))
{
var xmlSerializer = new XmlSerializer(typeof(T));
xmlSerializer.Serialize(streamWriter, obj);
}
}
用法:
// you will get this on a string variable
var xmlString = yourModel.ToXml<YourModel>();
// you will save our object in a file.
yourModel.ToXmlFile<YourModel>(@"C:\yourModelDump.xml");
请注意在您的类添加SerializableAttribute
[Serializable]
public class YourModel
{
//...
}
这应该这样做
相关问题
- 1. 反序列化XML文件
- 2. 问题从XML文件序列化/反序列化对象/
- 3. c#可序列化的对象XML文件位置
- 4. XML到LINQ反序列化为XML文档中的对象
- 5. XML文件模型映射asp.net MVC3(动态地将一个xml文件映射到一个模型类asp.net mvc3)
- 6. 反序列化xml文件的问题
- 7. 如何反序列化这种类型的XML文件?
- 8. 时遇到反序列化XML文件转换成类对象
- 9. 使用XmlArray反序列化xml文件?
- 10. 反序列化这个XML文件
- 11. Delphi DeHL反序列化新文件夹中的XML文件?
- 12. SAS XML映射 - 与多个XML文件
- 13. 如何将XML文件内容映射到C#对象
- 14. 对多个XML配置文件进行序列化/反序列化
- 15. 反序列化XML以反对在C列表中的对象#
- 16. 序列化,反序列化,追加,获取,在XML文件C#
- 17. 未在xml文件中序列化的嵌套对象
- 18. 对象Xml映射
- 19. 反序列化XML到对象在C#
- 20. 继承对象的XML反序列化
- 21. XML反对反序列化
- 22. 如何将XML反序列化未知类型的对象?
- 23. 赢RT反序列化的XML对象
- 24. XML - 在XML文件中查找值
- 25. 反序列化XML的复杂对象
- 26. 如何从Python3中的类文件xml对象查找节点?
- 27. 将XML反序列化为C#对象
- 28. 在AS3中序列化XML文件
- 29. 反序列化XML响应为对象
- 30. 部分反序列化XML到对象
Xml source text?您在使用DataContractSerializer时看到的任何问题? – 2011-12-22 12:00:53