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); } } }
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); }
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; }