예제 #1
0
        internal void ToJson(AutoCSer.JsonSerializer serializer)
        {
            MemberMap memberMap = MemberMap;

            if (memberMap == null || memberMap.IsDefault)
            {
                serializer.TypeSerialize(Value);
            }
            else
            {
                MemberMapValueJsonSerializeConfig config    = MemberMapValueJsonSerializeConfig.Pop() ?? new MemberMapValueJsonSerializeConfig();
                AutoCSer.Json.SerializeConfig     oldConfig = serializer.Config;
                AutoCSer.MemberCopy.Copyer <AutoCSer.Json.SerializeConfig> .Copy(config, oldConfig);

                (serializer.Config = config).MemberMap = memberMap;
                try
                {
                    serializer.TypeSerialize(Value);
                }
                finally
                {
                    serializer.Config = oldConfig;
                    config.MemberMap  = null;
                    MemberMapValueJsonSerializeConfig.PushNotNull(config);
                }
            }
        }
예제 #2
0
        internal static bool TestCase()
        {
            MemberMap value = new MemberMap {
                Value1 = 1, Value2 = 2, Value3 = 3
            };

            //成员位图初始化代价比较大,应该根据需求重用该对象
            AutoCSer.Metadata.MemberMap <MemberMap> serializeMemberMap = AutoCSer.Metadata.MemberMap <MemberMap> .NewEmpty();

#if DOTNET2
            serializeMemberMap.SetMember("Value1");                //添加成员 Value1
            serializeMemberMap.SetMember("Value2");                //添加成员 Value2
#else
            serializeMemberMap.SetMember(member => member.Value1); //添加成员 Value1
            serializeMemberMap.SetMember(member => member.Value2); //添加成员 Value2
#endif
            AutoCSer.Json.SerializeConfig serializeMemberMapConfig = new AutoCSer.Json.SerializeConfig {
                MemberMap = serializeMemberMap
            };

            string    json     = AutoCSer.Json.Serializer.Serialize(value, serializeMemberMapConfig);
            MemberMap newValue = AutoCSer.Json.Parser.Parse <MemberMap>(json);

            return(newValue != null && newValue.Value1 == 1 && newValue.Value2 == 2 && newValue.Value3 == 0);
        }
예제 #3
0
 static Server()
 {
     JsonConfig = AutoCSer.Json.ConfigLoader.GetUnion(typeof(AutoCSer.Json.SerializeConfig)).SerializeConfig;
     if (JsonConfig == null)
     {
         JsonConfig = AutoCSer.Json.SerializeConfig.CreateInternal();
     }
     else
     {
         JsonConfig = AutoCSer.MemberCopy.Copyer <AutoCSer.Json.SerializeConfig> .MemberwiseClone(JsonConfig);
     }
     JsonConfig.IsInfinityToNaN = false;
 }