1using System.Globalization;
7 public XElement
Node {
get;
private set; }
9 public XmlOutputArchive(
string rootNodeName,
int version = 0,
object context =
null) : this(new XElement(rootNodeName), version, context) { }
11 public XmlOutputArchive(XElement node,
int version = 0,
object context =
null) : base(version, context) {
12 ArgumentNullException.ThrowIfNull(node);
16 public void Reset(XElement node,
int version = 0,
object context =
null) {
17 Node = node ??
throw new ArgumentNullException(nameof(node));
18 Reset(version, context);
21 public override void Serialize(
string name, sbyte value) {
22 Serialize(name, value.ToString(CultureInfo.InvariantCulture));
25 public override void Serialize(
string name,
byte value) {
26 Serialize(name, value.ToString(CultureInfo.InvariantCulture));
29 public override void Serialize(
string name,
short value) {
30 Serialize(name, value.ToString(CultureInfo.InvariantCulture));
33 public override void Serialize(
string name, ushort value) {
34 Serialize(name, value.ToString(CultureInfo.InvariantCulture));
37 public override void Serialize(
string name,
int value) {
38 Serialize(name, value.ToString(CultureInfo.InvariantCulture));
41 public override void Serialize(
string name, uint value) {
42 Serialize(name, value.ToString(CultureInfo.InvariantCulture));
45 public override void Serialize(
string name,
long value) {
46 Serialize(name, value.ToString(CultureInfo.InvariantCulture));
49 public override void Serialize(
string name, ulong value) {
50 Serialize(name, value.ToString(CultureInfo.InvariantCulture));
53 public override void Serialize(
string name,
float value) {
54 Serialize(name, value.ToString(
"R", CultureInfo.InvariantCulture));
57 public override void Serialize(
string name,
double value) {
58 Serialize(name, value.ToString(
"R", CultureInfo.InvariantCulture));
61 public override void Serialize(
string name,
bool value) {
62 Serialize(name, value ?
"True" :
"False");
65 public override void Serialize(
string name,
char value) {
69 public override void Serialize(
string name,
string value) {
71 Node.SetValue(value ??
string.Empty);
74 Node.SetAttributeValue(name, value ??
string.Empty);
78 public override void Serialize(
string name,
byte[] value) {
79 Serialize(name, Convert.ToBase64String(value));
82 public override void Serialize(
string name,
int length,
byte[] value) {
83 if (value.Length != length) {
84 throw new InvalidOperationException(
"Invalid fixed array length.");
86 Serialize(name, Convert.ToBase64String(value));
93 using IEnumerator<XElement> enumerator =
Node.Elements().GetEnumerator();
94 foreach (T item
in collection) {
95 string name2 = itemNameFunc !=
null ? itemNameFunc(item) :
"Item";
96 if (flag && enumerator.MoveNext()) {
116 foreach (KeyValuePair<K, V> item
in dictionary) {
124 foreach (KeyValuePair<K, V> item2
in dictionary) {
134 public override void WriteObjectInfo(
int? objectId,
bool isReference, Type runtimeType) {
136 Node.SetAttributeValue(
"_ref", objectId.HasValue ? objectId.Value.ToString(CultureInfo.InvariantCulture) :
string.Empty);
139 Node.SetAttributeValue(
"_def", objectId.HasValue ? objectId.Value.ToString(CultureInfo.InvariantCulture) :
string.Empty);
140 if (runtimeType !=
null) {
151 base.WriteObject(name, staticSerializeData, value);
162 XElement xElement =
new(name);
167 XElement xElement2 =
Node.Element(name);
168 if (xElement2 ==
null) {
169 xElement2 =
new XElement(name);
187 HashSet<int>
set =
new();
193 foreach (XElement item
in node.Elements()) {
196 XAttribute xAttribute = node.Attribute(
"_def");
197 if (xAttribute !=
null
198 && !
set.Contains(
int.Parse(xAttribute.Value))) {
204 foreach (XElement item
in node.Elements()) {
207 XAttribute xAttribute = node.Attribute(
"_ref");
208 if (xAttribute !=
null) {
209 set.Add(
int.Parse(xAttribute.Value));
bool IsHumanReadableSupported
static SerializeData GetSerializeData(Type type, bool allowEmptySerializer)
static string ConvertToString(object value)
OutputArchive(int version, object context)
static string GetShortTypeName(string longTypeName)
override void Serialize(string name, sbyte value)
void LeaveNode(string name)
override void WriteObject(string name, SerializeData staticSerializeData, object value)
override void Serialize(string name, long value)
override void Serialize(string name, double value)
override void Serialize(string name, string value)
override void Serialize(string name, ushort value)
override void Serialize(string name, uint value)
static void FindUsedDefs(XElement node, HashSet< int > set)
override void Serialize(string name, short value)
XmlOutputArchive(string rootNodeName, int version=0, object context=null)
override void WriteObjectInfo(int? objectId, bool isReference, Type runtimeType)
override void Serialize(string name, char value)
void Reset(XElement node, int version=0, object context=null)
static void RemoveUnusedDefs(XElement node, HashSet< int > set)
override void Serialize(string name, int value)
void EnterNode(string name, bool createNewNode)
static void RemoveUnusedDefs(XElement node)
override void Serialize(string name, int length, byte[] value)
override void Serialize(string name, bool value)
void EnterNode(XElement node)
override void Serialize(string name, ulong value)
override void Serialize(string name, byte value)
override void Serialize(string name, byte[] value)
override void Serialize(string name, float value)
XmlOutputArchive(XElement node, int version=0, object context=null)
override void SerializeDictionary< K, V >(string name, IDictionary< K, V > dictionary)
override void SerializeCollection< T >(string name, Func< T, string > itemNameFunc, IEnumerable< T > collection)