哪個是使用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. 問題從XML文件序列化/反序列化對象/
- 4. 如何在大型XML文件中查找事件對象
- 5. 如何反序列化此XML文件?
- 6. c#可序列化的對象XML文件位置
- 7. 映射xml文件
- 8. 如何反序列化映射對象
- 9. XML到LINQ反序列化爲XML文檔中的對象
- 10. 如何從xml文件反序列化到java中的對象列表?
- 11. 反序列化xml文件的問題
- 12. 如何反序列化這種類型的XML文件?
- 13. XML文件模型映射asp.net MVC3(動態地將一個xml文件映射到一個模型類asp.net mvc3)
- 14. 反序列化多個XML文件到對象
- 15. 如何反序列化XML到對象
- 16. 時遇到反序列化XML文件轉換成類對象
- 17. 用XML文件反序列化
- 18. C#反序列化XML文件
- 19. 使用XmlArray反序列化xml文件?
- 20. 反序列化這個XML文件
- 21. XamlParseException當反序列化XML文件
- 22. Delphi DeHL反序列化新文件夾中的XML文件?
- 23. 如何在XML中反序列化XML?
- 24. 使用序列化映射類和xml文件
- 25. SAS XML映射 - 與多個XML文件
- 26. 反序列化後從xml文件中提取二級文件
- 27. 如何將XML文件內容映射到C#對象
- 28. 對多個XML配置文件進行序列化/反序列化
- 29. 反序列化XML以反對在C列表中的對象#
- 30. 如何在Java中的xml文件中反序列化電子郵件列表?
Xml source text?您在使用DataContractSerializer時看到的任何問題? – 2011-12-22 12:00:53