예제 #1
0
        public void WriteArray(Type rType, bool bDynamic)
        {
            if (this.ReceiveGeneratedArrayType(rType, bDynamic))
            {
                return;
            }

            var rTypeName    = HotfixSerializerAssists.GetTypeName(rType);
            var rElementType = rType.GetElementType();

            var rTDText  = bDynamic ? "Dynamic" : string.Empty;
            var rTDEText = bDynamic && !HotfixSerializerAssists.IsBaseType(rElementType, false) ? "Dynamic" : string.Empty;

            this.WriteBraceCode(2,
                                $"public static void Serialize{rTDText}(this BinaryWriter rWriter, {rTypeName} value)",
                                "{",
                                $@"var bValid = (null != value);
	        rWriter.Serialize(bValid);
	        if (!bValid) return;

	        rWriter.Serialize(value.Length); 
	        for (int nIndex = 0; nIndex < value.Length; nIndex++)
                rWriter.Serialize{rTDEText}({(rElementType.IsEnum ? "(int)value[nIndex]" : "value[nIndex]")});",
                                "}");

            this.WriteBraceCode(2,
                                $"public static {rTypeName} Deserialize(this BinaryReader rReader, {rTypeName} value)",
                                "{",
                                $@"var bValid = rReader.Deserialize(default(bool));
			if (!bValid) return null;

            var nCount  = rReader.Deserialize(default(int));
            var rResult = new {rTypeName.Insert(rTypeName.IndexOf('[') + 1, "nCount")};
			for (int nIndex = 0; nIndex < nCount; nIndex++)
                rResult[nIndex] = {(rElementType.IsEnum ? string.Format("({0})", rElementType.FullName) : string.Empty)}rReader.Deserialize{rTDEText}({HotfixSerializerAssists.GetDeserializeUnwrap(rElementType)});
            return rResult;",
                                "}");
        }
예제 #2
0
        public void WriteDictionary(Type rType, bool bDynamic)
        {
            if (this.ReceiveGeneratedDictionaryType(rType, bDynamic))
            {
                return;
            }

            var rTypeName  = HotfixSerializerAssists.GetTypeName(rType);
            var rKeyType   = rType.GetGenericArguments()[0];
            var rValueType = rType.GetGenericArguments()[1];

            var rTDText  = bDynamic ? "Dynamic" : string.Empty;
            var rTDKText = bDynamic && !HotfixSerializerAssists.IsBaseType(rKeyType, false) ? "Dynamic" : string.Empty;
            var rTDVText = bDynamic && !HotfixSerializerAssists.IsBaseType(rValueType, false) ? "Dynamic" : string.Empty;

            this.WriteBraceCode(2,
                                $"public static void Serialize{rTDText}(this BinaryWriter rWriter, {rTypeName} value)",
                                @"{",
                                $@"var bValid = (null != value);
			rWriter.Serialize(bValid);
			if (!bValid) return;

			rWriter.Serialize(value.Count);
            {this.GenerateBraceCode(0, 
            "foreach(var rPair in value)",
"            {",
$@"            rWriter.Serialize{rTDKText}({(rKeyType.IsEnum ? "(int)rPair.Key" : "rPair.Key")});
				rWriter.Serialize{rTDVText}({(rValueType.IsEnum ? "(int)rPair.Value" : "rPair.Value")});",
"            }")}",
                                "}");

            this.WriteBraceCode(2,
                                $"public static {rTypeName} Deserialize{rTDText}(this BinaryReader rReader, {rTypeName} value)",
                                @"{",
                                $@"var bValid = rReader.Deserialize(default(bool));
			if (!bValid) return null;

			var nCount  = rReader.Deserialize(default(int));
            var rResult = new {rTypeName}();
            {this.GenerateBraceCode(0,
            "for (int nIndex = 0; nIndex < nCount; ++ nIndex)",
"            {",
$@"            var rKey   = {(rKeyType.IsEnum ? string.Format("({0})", rKeyType.FullName) : string.Empty)}rReader.Deserialize{rTDKText}({HotfixSerializerAssists.GetDeserializeUnwrap(rKeyType)});
                var rValue = {(rValueType.IsEnum ? string.Format("({0})", rValueType.FullName) : string.Empty)}rReader.Deserialize{rTDVText}({HotfixSerializerAssists.GetDeserializeUnwrap(rValueType)});
                rResult.Add(rKey, rValue);",
"            }")}
            return rResult;",
                                "}");
        }