Created
June 20, 2017 12:10
-
-
Save inventti-gabriel/81054269f2e0a32d7e8d1dd44f30a97f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.IO; | |
using System.Linq; | |
using System.Text; | |
using System.Xml; | |
using System.Xml.Serialization; | |
namespace TesteSerializacao | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
var a = new A | |
{ | |
aaa = "aaa", | |
asd = "asd", | |
qwe = new[] {"q", "w", "e"} | |
}; | |
var s = Serialize(a); | |
var ss = Deserialize<A>(s); | |
var s2 = Serialize(ss); | |
Console.WriteLine(s); | |
Console.WriteLine(s2); | |
Console.WriteLine("Equals: {0};", s == s2); | |
Console.ReadKey(); | |
} | |
public static string Serialize<T>(T a) | |
{ | |
var s = new XmlSerializer(typeof(T)); | |
using (var ms = new MemoryStream()) | |
{ | |
using (TextWriter sw = new StreamWriter(ms)) | |
{ | |
s.Serialize(sw, a); | |
ms.Seek(0, 0); | |
using (var sr = new StreamReader(ms)) | |
{ | |
return sr.ReadToEnd(); | |
} | |
} | |
} | |
} | |
public static T Deserialize<T>(string a) | |
{ | |
var s = new XmlSerializer(typeof(T)); | |
var bytes = Encoding.ASCII.GetBytes(a); | |
using (var ms = new MemoryStream(bytes)) | |
{ | |
return (T) s.Deserialize(ms); | |
} | |
} | |
} | |
[XmlRoot] | |
[Serializable] | |
public class A | |
{ | |
[XmlElement("asd", Order=1)] | |
public string asd { get; set; } | |
[XmlIgnore] | |
public string[] qwe { get; set; } | |
[XmlAnyElement("nnn", Order=2)] | |
public XmlNode[] nnn | |
{ | |
get | |
{ | |
if (qwe == null) return null; | |
var xml = new XmlDocument(); | |
var nodes = new List<XmlNode>(qwe.Length); | |
foreach (var q in qwe) | |
{ | |
var nnnTag = xml.CreateNode(XmlNodeType.Element, "nnn", null); | |
nnnTag.InnerText = q; | |
nodes.Add(nnnTag); | |
} | |
return nodes.ToArray(); | |
} | |
set | |
{ | |
if (value == null) return; | |
qwe = value.Select(tag => tag.InnerText).ToArray(); | |
} | |
} | |
[XmlElement("aaa", Order=3)] | |
public string aaa { get; set; } | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment