예제 #1
0
        public static bool TryDeserialize <T>(ComplianceSerializationDescription <T> description, byte[] blob, out T parsedObject, out FaultDefinition faultDefinition, [CallerMemberName] string callerMember = null, [CallerFilePath] string callerFilePath = null, [CallerLineNumber] int callerLineNumber = 0) where T : class, new()
        {
            parsedObject = Activator.CreateInstance <T>();
            int totalLength = blob.Length;

            if (description.ComplianceStructureId != blob[0])
            {
                faultDefinition = FaultDefinition.FromErrorString("Parsing wrong structure", callerMember, callerFilePath, callerLineNumber);
                return(false);
            }
            int           startIndex    = 1;
            StringBuilder stringBuilder = new StringBuilder();
            bool          flag          = true;

            flag = ComplianceSerializer.TryWriteFixedWidthFieldsToObject <T>(ref description, ref parsedObject, blob, startIndex, 1, ComplianceSerializer.FixedWidthType.Byte, totalLength, flag, out startIndex, ref stringBuilder);
            flag = ComplianceSerializer.TryWriteFixedWidthFieldsToObject <T>(ref description, ref parsedObject, blob, startIndex, 2, ComplianceSerializer.FixedWidthType.Short, totalLength, flag, out startIndex, ref stringBuilder);
            flag = ComplianceSerializer.TryWriteFixedWidthFieldsToObject <T>(ref description, ref parsedObject, blob, startIndex, 4, ComplianceSerializer.FixedWidthType.Int, totalLength, flag, out startIndex, ref stringBuilder);
            flag = ComplianceSerializer.TryWriteFixedWidthFieldsToObject <T>(ref description, ref parsedObject, blob, startIndex, 8, ComplianceSerializer.FixedWidthType.Long, totalLength, flag, out startIndex, ref stringBuilder);
            flag = ComplianceSerializer.TryWriteFixedWidthFieldsToObject <T>(ref description, ref parsedObject, blob, startIndex, 8, ComplianceSerializer.FixedWidthType.Double, totalLength, flag, out startIndex, ref stringBuilder);
            flag = ComplianceSerializer.TryWriteFixedWidthFieldsToObject <T>(ref description, ref parsedObject, blob, startIndex, 16, ComplianceSerializer.FixedWidthType.Guid, totalLength, flag, out startIndex, ref stringBuilder);
            flag = ComplianceSerializer.TryWriteVariableWidthMembersToObject <T>(ref description, ref parsedObject, blob, startIndex, totalLength, ComplianceSerializer.VariableWidthType.String, flag, out startIndex, ref stringBuilder);
            flag = ComplianceSerializer.TryWriteVariableWidthMembersToObject <T>(ref description, ref parsedObject, blob, startIndex, totalLength, ComplianceSerializer.VariableWidthType.Blob, flag, out startIndex, ref stringBuilder);
            if (flag)
            {
                flag = ComplianceSerializer.TryWriteCollectionsToObject <T>(ref description, ref parsedObject, blob, startIndex, totalLength, out startIndex, ref stringBuilder);
            }
            if (flag)
            {
                faultDefinition = null;
            }
            else
            {
                faultDefinition = FaultDefinition.FromErrorString(stringBuilder.ToString(), callerMember, callerFilePath, callerLineNumber);
            }
            return(flag);
        }