1using System.Globalization;
7 public XElement
Node {
get;
private set; }
9 public XmlInputArchive(XElement node,
int version = 0,
object context =
null) : base(version, context) {
10 ArgumentNullException.ThrowIfNull(node);
14 public void Reset(XElement node,
int version = 0,
object context =
null) {
15 Node = node ??
throw new ArgumentNullException(nameof(node));
16 Reset(version, context);
19 public override void Serialize(
string name, ref sbyte value) {
22 value = sbyte.Parse(value2, CultureInfo.InvariantCulture);
25 public override void Serialize(
string name, ref
byte value) {
28 value =
byte.Parse(value2, CultureInfo.InvariantCulture);
31 public override void Serialize(
string name, ref
short value) {
34 value =
short.Parse(value2, CultureInfo.InvariantCulture);
37 public override void Serialize(
string name, ref ushort value) {
40 value = ushort.Parse(value2, CultureInfo.InvariantCulture);
43 public override void Serialize(
string name, ref
int value) {
46 value =
int.Parse(value2, CultureInfo.InvariantCulture);
49 public override void Serialize(
string name, ref uint value) {
52 value = uint.Parse(value2, CultureInfo.InvariantCulture);
55 public override void Serialize(
string name, ref
long value) {
58 value =
long.Parse(value2, CultureInfo.InvariantCulture);
61 public override void Serialize(
string name, ref ulong value) {
64 value = ulong.Parse(value2, CultureInfo.InvariantCulture);
67 public override void Serialize(
string name, ref
float value) {
70 value =
float.Parse(value2, CultureInfo.InvariantCulture);
73 public override void Serialize(
string name, ref
double value) {
76 value =
double.Parse(value2, CultureInfo.InvariantCulture);
79 public override void Serialize(
string name, ref
bool value) {
82 if (
string.Equals(value2,
"False", StringComparison.OrdinalIgnoreCase)) {
86 if (
string.Equals(value2,
"True", StringComparison.OrdinalIgnoreCase)) {
90 throw new InvalidOperationException($
"Cannot convert string \"{value2}\" to a Boolean.");
93 public override void Serialize(
string name, ref
char value) {
96 if (value2.Length == 1) {
100 throw new InvalidOperationException($
"Cannot convert string \"{value2}\" to a Char.");
103 public override void Serialize(
string name, ref
string value) {
105 XAttribute xAttribute =
Node.Attribute(name);
106 if (xAttribute ==
null) {
107 throw new InvalidOperationException($
"Required XML node \"{name}\" not found.");
109 value = xAttribute.Value;
116 public override void Serialize(
string name, ref
byte[] value) {
117 string value2 =
null;
119 value = Convert.FromBase64String(value2);
122 public override void Serialize(
string name,
int length, ref
byte[] value) {
123 string value2 =
null;
125 value = Convert.FromBase64String(value2);
126 if (value.Length != length) {
127 throw new InvalidOperationException(
"Invalid fixed array length.");
134 using (IEnumerator<T> enumerator = collection.Count > 0 ? collection.GetEnumerator() :
null) {
135 foreach (XElement item
in Node.Elements()) {
137 if (enumerator !=
null
138 && enumerator.MoveNext()) {
139 T value = enumerator.Current;
140 ReadObject(
null, serializeData, ref value,
false);
144 ReadObject(
null, serializeData, ref value2,
true);
145 collection.Add(value2);
157 if (typeof(K) == typeof(
string)) {
158 using (IEnumerator<XElement> enumerator =
Node.Elements().GetEnumerator()) {
159 while (enumerator.MoveNext()) {
160 XElement xElement =
Node = enumerator.Current;
161 if (xElement !=
null) {
162 string localName = XmlConvert.DecodeName(xElement.Name.LocalName);
165 if (dictionary.TryGetValue(key, out V value2)) {
167 ReadObject(
null, serializeData2, ref value,
false);
170 ReadObject(
null, serializeData2, ref value,
true);
171 dictionary.Add(key, value);
179 using (IEnumerator<XElement> enumerator =
Node.Elements().GetEnumerator()) {
180 while (enumerator.MoveNext()) {
184 ReadObject(
"k", serializeData, ref value3,
true);
185 if (dictionary.TryGetValue(value3, out V value5)) {
187 ReadObject(
"v", serializeData2, ref value4,
false);
189 ReadObject(
"v", serializeData2, ref value4,
true);
190 dictionary.Add(value3, value4);
198 public override void ReadObjectInfo(out
int? objectId, out
bool isReference, out Type runtimeType) {
199 XAttribute xAttribute =
Node.Attribute(
"_ref");
200 if (xAttribute !=
null) {
203 objectId =
int.Parse(xAttribute.Value);
206 XAttribute xAttribute2 =
Node.Attribute(
"_def");
207 objectId = xAttribute2 !=
null ?
new int?(
int.Parse(xAttribute2.Value)) :
null;
208 XAttribute xAttribute3 =
Node.Attribute(
"_type");
209 if (xAttribute2 !=
null
210 && xAttribute3 !=
null) {
219 protected override void ReadObject(
string name,
SerializeData staticSerializeData, ref
object value,
bool allowOverwriteOfExistingObject) {
221 string value2 =
null;
227 base.ReadObject(name, staticSerializeData, ref value, allowOverwriteOfExistingObject);
233 object value2 = value;
234 ReadObject(name, staticSerializeData, ref value2, allowOverwriteOfExistingObject);
240 XElement xElement =
Node.Element(name);
241 Node = xElement ??
throw new InvalidOperationException($
"XML element \"{name}\" not found.");
bool IsHumanReadableSupported
static SerializeData GetSerializeData(Type type, bool allowEmptySerializer)
static object ConvertFromString(Type type, string data)
static Type FindType(string typeName, bool skipSystemAssemblies, bool throwIfNotFound)