-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathXmlAnyObject.cs
More file actions
121 lines (109 loc) · 3.75 KB
/
Copy pathXmlAnyObject.cs
File metadata and controls
121 lines (109 loc) · 3.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace XmlAnyConsole
{
/// <summary>
///
/// </summary>
[XmlRoot]
public class XmlAnyObject
{
/// <summary>
///
/// </summary>
[XmlIgnore]
private static string XmlStartStc { get { return "<" + typeof(XmlAnyObject).Name + ">"; } }
/// <summary>
///
/// </summary>
[XmlIgnore]
private static string XmlEndStc { get { return "</" + typeof(XmlAnyObject).Name + ">"; } }
/// <summary>
///
/// </summary>
[XmlIgnore]
private string XmlStart { get { return "<" + typeof(XmlAnyObject).Name + ">"; } }
/// <summary>
///
/// </summary>
[XmlIgnore]
private string XmlEnd { get { return "</" + typeof(XmlAnyObject).Name + ">"; } }
/// <summary>
///
/// </summary>
public XmlAnyObject()
{
}
/// <summary>
///
/// </summary>
[XmlAnyElement]
public XmlElement[] Elements { get; set; }
/// <summary>
///
/// </summary>
[XmlAnyAttribute]
public XmlAttribute[] Attributes { get; set; }
/// <summary>
///
/// </summary>
[XmlIgnore]
public XmlAnyObject[] Children
{
get
{
List<XmlAnyObject> xChilds = new List<XmlAnyObject>();
if (null != this.Elements && this.Elements.Length > 0)
{
for (int i = 0; i < this.Elements.Length; i++)
{
using (StringReader stringReader = new StringReader(this.XmlStart + this.Elements[i].InnerXml + this.XmlEnd))
{
XmlSerializer serializer = new XmlSerializer(typeof(XmlAnyObject));
xChilds.Add(serializer.Deserialize(stringReader) as XmlAnyObject);
}
}
}
return xChilds.ToArray();
}
}
/// <summary>
///
/// </summary>
/// <param name="xml"></param>
/// <returns></returns>
public static XmlAnyObject Deserialize(string xml)
{
const string xmlStartDeclaration = "<?",
xmlEndDeclaration = "?>";
if (xml.Contains(xmlStartDeclaration) && xml.Contains(xmlEndDeclaration))
{
int startPos = xml.LastIndexOf(xmlStartDeclaration) + xmlStartDeclaration.Length,
length = xml.IndexOf(xmlEndDeclaration) - startPos;
string sub = xml.Substring(startPos, length);
xml = xml.Replace(xmlStartDeclaration, "").Replace(xmlEndDeclaration, "").Replace(sub, "");
}
using (StringReader stringReader = new StringReader(XmlStartStc + xml + XmlEndStc))
{
XmlSerializer serializer = new XmlSerializer(typeof(XmlAnyObject));
return (XmlAnyObject)serializer.Deserialize(stringReader);
}
}
/// <summary>
///
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static string Serialize(XmlAnyObject obj)
{
using (StringWriter writer = new StringWriter())
{
XmlSerializer serializer = new XmlSerializer(typeof(XmlAnyObject));
serializer.Serialize(writer, obj);
return writer.ToString();
}
}
}
}