Advertisement
Guest User

XmlText Serializing/Deserializing problem

a guest
Nov 13th, 2013
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.64 KB | None | 0 0
  1. //using System.Xml.Serialization;
  2.  
  3. void Main()
  4. {
  5.    Root root = Root.Create();
  6.      
  7.            //spaces correct here
  8.    string saveFile = SaveAndOpen(root);
  9.  
  10.            //spaces incorrect here
  11.    Root reRoot = FromFile(saveFile);
  12.    SaveAndOpen(reRoot);
  13. }
  14.  
  15. public string SaveAndOpen(Root root)
  16. {
  17.    XDocument doc = SerializeToXml(root);
  18.    string saveFile = Path.GetTempFileName() + ".xml";
  19.    doc.Save(saveFile);    
  20.    Process.Start(saveFile);
  21.    return saveFile;
  22. }
  23.  
  24. public static Root FromFile(string file)
  25. {
  26.    XmlSerializer serializer = new XmlSerializer(typeof(Root));      
  27.  
  28.    XmlReaderSettings settings = new XmlReaderSettings();
  29.    XmlReader reader = XmlTextReader.Create(file, settings);
  30.    
  31.    Root root = serializer.Deserialize(reader) as Root;
  32.    return root;
  33. }
  34.  
  35. public XDocument SerializeToXml(Root obj)
  36. {
  37.    XmlSerializer serializer = new XmlSerializer(typeof(Root));
  38.    XDocument doc = new XDocument();
  39.    using (var writer = doc.CreateWriter())
  40.    {
  41.            serializer.Serialize(writer, obj);
  42.    }
  43.  
  44.    return doc;
  45. }
  46.  
  47. [XmlRoot("root")]
  48. public class Root
  49. {
  50.     [XmlText(typeof(string))]
  51.     [XmlElement("tag", typeof(Tag))]
  52.     public List<object> Elements { get; set; }
  53.    
  54.     //this is simply for the sake of example
  55.     public static Root Create()
  56.     {
  57.         Root root = new Root();
  58.    
  59.         root.Elements.Add("Leading text ");
  60.         root.Elements.Add(new Tag() { Text = "tag1" });
  61.         root.Elements.Add("    ");
  62.         root.Elements.Add(new Tag() { Text = "tag2" });
  63.    
  64.         return root;
  65.     }
  66.    
  67.     public Root()
  68.     {
  69.         Elements = new List<object>();
  70.     }
  71. }
  72.  
  73. public class Tag
  74. {
  75.    [XmlText]
  76.    public string Text {get;set;}
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement