示例#1
0
        private string SerializeNestedObject <T>(NestedMapping nestedMapping, T data)
        {
            if (data == null)
            {
                return(string.Format("{0} : {1} \n", nestedMapping.ScopedName, null));
            }

            var output      = new StringBuilder();
            var currentData = nestedMapping.GetValue(data);
            var result      = Serialize(nestedMapping.InternalMappings, currentData);

            output.Append(result);
            return(output.ToString());
        }
示例#2
0
        protected virtual void SerializeNestedObject <T>(NestedMapping nestedMapping, T data, TSerializeState state)
        {
            var currentData = AttemptGetValue(nestedMapping, data, state);

            if (currentData == null)
            {
                return;
            }

            if (nestedMapping.IsDynamicType)
            {
                SerializeDynamicTypeData(currentData, state);
                return;
            }

            Serialize(nestedMapping.InternalMappings, currentData, state);
        }
示例#3
0
        public virtual NestedMapping CreateNestedMappingFor(PropertyInfo propertyInfo, string scope)
        {
            var nestedMapping = new NestedMapping
            {
                LocalName     = propertyInfo.Name,
                ScopedName    = scope,
                Type          = propertyInfo.PropertyType,
                GetValue      = x => propertyInfo.GetValue(x, null),
                SetValue      = (x, v) => propertyInfo.SetValue(x, v, null),
                IsDynamicType = TypeAnalyzer.IsDynamicType(propertyInfo)
            };

            var mappingTypes = GetMappingsFromType(propertyInfo.PropertyType, scope);

            nestedMapping.InternalMappings.AddRange(mappingTypes);
            return(nestedMapping);
        }
示例#4
0
        protected virtual void DeserializeNestedObject <T>(NestedMapping nestedMapping, T instance, TDeserializeState state)
        {
            if (IsObjectNull(state))
            {
                nestedMapping.SetValue(instance, null);
                return;
            }

            if (nestedMapping.IsDynamicType)
            {
                var dynamicInstance = DeserializeDynamicTypeData(state);
                nestedMapping.SetValue(instance, dynamicInstance);
                return;
            }

            var childInstance = TypeCreator.Instantiate(nestedMapping.Type);

            nestedMapping.SetValue(instance, childInstance);
            Deserialize(nestedMapping.InternalMappings, childInstance, state);
        }