From ec568438369beccf7e2a6ff5ccb16d96b02443db Mon Sep 17 00:00:00 2001 From: Timerix22 Date: Mon, 20 Jun 2022 19:57:46 +0300 Subject: [PATCH] dtsod and extension methods improvements --- .../ClassSerializer/DtsodAttributes.cs | 41 ++++++++++++++ .../Dependencies/windows/x64/kerep.dll | Bin 46592 -> 47104 bytes .../Dependencies/windows/x86/kerep.dll | Bin 39936 -> 39936 bytes DTLib.Dtsod/DtsodV23.cs | 50 ++++++++++++------ DTLib.Dtsod/V30/DtsodSerializableAttribute.cs | 7 --- DTLib/Extensions/Collections.cs | 28 ---------- DTLib/Extensions/StringConverter.cs | 2 + 7 files changed, 78 insertions(+), 50 deletions(-) create mode 100644 DTLib.Dtsod/ClassSerializer/DtsodAttributes.cs delete mode 100644 DTLib.Dtsod/V30/DtsodSerializableAttribute.cs diff --git a/DTLib.Dtsod/ClassSerializer/DtsodAttributes.cs b/DTLib.Dtsod/ClassSerializer/DtsodAttributes.cs new file mode 100644 index 0000000..e870b1c --- /dev/null +++ b/DTLib.Dtsod/ClassSerializer/DtsodAttributes.cs @@ -0,0 +1,41 @@ +using System.Xml.Serialization; + +namespace DTLib.Dtsod; + +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface)] +public class DtsodSerializableAttribute : Attribute +{ + public DtsodVersion Version; + public DtsodSerializableAttribute(DtsodVersion ver) => Version = ver; +} + + +[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] +public class SerializeAsAttribute: Attribute +{ + public string Key; + /// + /// use it only for base types + /// + /// name the field will be serialized as + public SerializeAsAttribute(string key) => Key = key; +} + +[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] +public class SerializationMethodAttribute : Attribute +{ + public Func Method; + /// + /// + /// how to serialize field + public SerializationMethodAttribute(Func method) => Method = method; +} +[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] +public class DeserializationMethodAttribute : Attribute +{ + public Func Method; + /// + /// + /// how to deserialize field + public DeserializationMethodAttribute( Func method) => Method = method; +} \ No newline at end of file diff --git a/DTLib.Dtsod/Dependencies/windows/x64/kerep.dll b/DTLib.Dtsod/Dependencies/windows/x64/kerep.dll index 0aff218375ce10f68e2fd477a7b219ec0871c127..2286c235a7ecd504f93c7139a20d27874e537e0b 100644 GIT binary patch delta 12714 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 diff --git a/DTLib.Dtsod/Dependencies/windows/x86/kerep.dll b/DTLib.Dtsod/Dependencies/windows/x86/kerep.dll index b5a30f84cff57a84ae76f4b9dad11914007c0fce..109371d3ec21821dfa4e473c82caab908f5c2690 100644 GIT binary patch delta 14080 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 J^KVAe{|B?ec*+0( delta 14184 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 Mt~@u8Udu@T7pm+-&Hw-a diff --git a/DTLib.Dtsod/DtsodV23.cs b/DTLib.Dtsod/DtsodV23.cs index e9e32fd..29cacda 100644 --- a/DTLib.Dtsod/DtsodV23.cs +++ b/DTLib.Dtsod/DtsodV23.cs @@ -151,7 +151,9 @@ public class DtsodV23 : DtsodDict, IDtsod List list = new(); while (true) { - list.Add(ReadValue(out bool _eol)); + var item = ReadValue(out bool _eol); + if(item!=null) + list.Add(item); if (_eol) break; } @@ -239,6 +241,12 @@ public class DtsodV23 : DtsodDict, IDtsod break; case ';': case ',': + if(b.Length == 0) + { + if(endOfList) + return null; + throw new Exception("zero length value"); + } string str = b.ToString(); b.Clear(); return ParseValue(str); @@ -287,42 +295,54 @@ public class DtsodV23 : DtsodDict, IDtsod { typeof(double), (val, b) => b.Append(val.ToString(CultureInfo.InvariantCulture)) }, { typeof(decimal), (val, b) => b.Append(val.ToString(CultureInfo.InvariantCulture)).Append("de") } }; - short tabscount = -1; - protected StringBuilder Serialize(DtsodV23 dtsod, StringBuilder b = null) - { + + protected StringBuilder Serialize(DtsodV23 dtsod, ref int tabscount, StringBuilder b = null) + {; tabscount++; if (b is null) b = new StringBuilder(); foreach (var pair in dtsod) { b.Append('\t', tabscount).Append(pair.Key).Append(": "); - SerializeType(pair.Value); + SerializeType(pair.Value, ref tabscount); b.Append(";\n"); - void SerializeType(dynamic value) + void SerializeType(dynamic value, ref int tabscount) { if (value is null) b.Append("null"); + else if (value is DtsodV23 _dtsod) + { + b.Append("{\n"); + Serialize(_dtsod, ref tabscount, b); + b.Append('}'); + } else if (value is IList _list) { b.Append('['); foreach (object el in _list) { - SerializeType(el); + SerializeType(el, ref tabscount); b.Append(','); } b.Remove(b.Length - 1, 1).Append(']'); } - else if (value is DtsodV23 _dtsod) - { - b.Append("{\n"); - Serialize(_dtsod, b); - b.Append('}'); - } else TypeSerializeFuncs[value.GetType()].Invoke(value, b); } } tabscount--; return b; } - - public override string ToString() => Serialize(this).ToString(); + + public override string ToString() + { + int tabscount = -1; + return Serialize(this, ref tabscount).ToString(); + } + + ///serializes dtsod as part of list + public string ToString(string partialListName) + { + int tabscount = 0; + var builder = new StringBuilder().Append('$').Append(partialListName).Append(":\n{\n"); + return Serialize(this, ref tabscount, builder).Append("};\n").ToString(); + } } diff --git a/DTLib.Dtsod/V30/DtsodSerializableAttribute.cs b/DTLib.Dtsod/V30/DtsodSerializableAttribute.cs deleted file mode 100644 index 9d3fe10..0000000 --- a/DTLib.Dtsod/V30/DtsodSerializableAttribute.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace DTLib.Dtsod; - -public class DtsodSerializableAttribute : Attribute -{ - public DtsodVersion Version; - public DtsodSerializableAttribute(DtsodVersion ver) => Version = ver; -} diff --git a/DTLib/Extensions/Collections.cs b/DTLib/Extensions/Collections.cs index f189203..ec7f5cc 100644 --- a/DTLib/Extensions/Collections.cs +++ b/DTLib/Extensions/Collections.cs @@ -2,37 +2,9 @@ public static class Collections { - public static void ForEach(this IEnumerable en, Action act) { foreach (T elem in en) act(elem); } - - // массив в лист - public static List ToList(this T[] input) - { - var list = new List(); - list.AddRange(input); - return list; - } - - // удаление нескольких элементов массива - public static T[] RemoveRange(this T[] input, int startIndex, int count) - { - var list = input.ToList(); - list.RemoveRange(startIndex, count); - return list.ToArray(); - } - public static T[] RemoveRange(this T[] input, int startIndex) => input.RemoveRange(startIndex, input.Length - startIndex); - - - // метод как у листов - public static bool Contains(this T[] array, T value) - { - for (int i = 0; i < array.Length; i++) - if (array[i].Equals(value)) - return true; - return false; - } } diff --git a/DTLib/Extensions/StringConverter.cs b/DTLib/Extensions/StringConverter.cs index b849962..70ed1c1 100644 --- a/DTLib/Extensions/StringConverter.cs +++ b/DTLib/Extensions/StringConverter.cs @@ -144,4 +144,6 @@ public static class StringConverter if (max * length != s.Length) parts.Add(s.Substring(max * length, s.Length - max * length)); return parts; } + + public static bool IsNullOrEmpty(this string s) => String.IsNullOrEmpty(s); }