コード例 #1
0
		public void Repro64_v2_ReadonlyStructs_Ctor()
		{
			var config = new SerializerConfig { DefaultTargets = TargetMember.AllFields, PreserveReferences = false };
			config.Advanced.ReadonlyFieldHandling = ReadonlyFieldHandling.ForcedOverwrite;
			config.Advanced.SkipCompilerGeneratedFields = false;
			int nCtor=0;
			int nUninit=0;
			config.OnConfigNewType = tc =>
			{
				var ctor = tc.Type.GetConstructors(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).FirstOrDefault();
				if (ctor != null)
				{
					tc.TypeConstruction = TypeConstruction.ByConstructor(ctor);
					nCtor++;
				}
				else
				{
					tc.TypeConstruction = TypeConstruction.ByUninitialized();
					nUninit++;
				}
			};
			

			var ceras = new CerasSerializer(config);

			var obj = new NullableWrapper(new Test { Value = 2.34M, SubStruct = new SubStruct(new NameAge("riki", 5), 6, 7) });
			var clone = ceras.Advanced.Clone(obj);

			Assert.Equal(7, nCtor);
			Assert.Equal(1, nUninit);

			Assert.Equal(obj.TestStruct.Value.Value, clone.TestStruct.Value.Value);
			Assert.Equal(obj.TestStruct.Value.SubStruct.Num, clone.TestStruct.Value.SubStruct.Num);
			Assert.Equal(obj.TestStruct.Value.SubStruct.NameAge.Age, clone.TestStruct.Value.SubStruct.NameAge.Age);
			Assert.Equal(obj.TestStruct.Value.SubStruct.NameAge.Name, clone.TestStruct.Value.SubStruct.NameAge.Name);
		}