using System; using System.Diagnostics; using System.IO; using System.Net; using System.Net.Sockets; using System.Text; //using Org.BouncyCastle.Crypto.IO; namespace ser; public record class SimpleImmutable( string Name, int Age ) : imm.Timed; static public class Test { public class ExternalClass { public string ActualProperty { get; set; } = "test_ActualProperty_set_inline"; //public string ActualProperty_NotSerialized { get; set; } = "ActualProperty_NotSerialized"; } [ser.Ser( Types = ser.Types.Implied )] public partial class LeaveWithExternalClasss { //[ser.Do] //public bool _cccwp_doBool = true; [ser.ChildPropsAttribute( "ActualProperty" )] public ExternalClass _leaf_external = new(); //public string _cccwp_doNotSerialize = "test_do_not_serialize"; } [ser.Ser] public class TrunkClass { public LeaveWithExternalClasss _trunk_leaf = new(); //public int _chf_test = 10; //private string _chf_priv_string = "test_priv_string"; }; public static void Serialization() { ser.XmlCfg cfg = new() { Verbose = true, }; ser.TypeMetaCache metaCache = new( cfg ); //metaCache.AddType( typeof( ClassContainsClassWithProp ), "ActualProperty" ); TrunkClass trunk = new() { _trunk_leaf = new() { _leaf_external = new() { ActualProperty = "ActualProperty_set_in_cons" } } }; Debug.Assert( trunk._trunk_leaf._leaf_external.ActualProperty == "ActualProperty_set_in_cons" ); var memStream = new MemoryStream(); { var xml = new ser.XmlSer( cfg, metaCache ); xml.Serialize( memStream, trunk ); } memStream.Position = 0; var strXml = System.Text.Encoding.UTF8.GetString( memStream.ToArray() ); var badXml = "\n \n"; ///* var badXml_02 = @""" """; //*/ Debug.Assert( strXml != badXml ); memStream.Position = 0; var classHasFields2 = new TrunkClass(); //classHasFields2._chf_prop._cccwp_propHolder.ActualProperty_NotSerialized = "ActualProperty_NotSerialized_set_in_test_01"; Debug.Assert( trunk._trunk_leaf._leaf_external.ActualProperty == "test_ActualProperty_set_inline" ); //Debug.Assert( classHasFields2._chf_prop._cccwp_propHolder.ActualProperty_NotSerialized == "ActualProperty_NotSerialized" ); { var xml = new ser.XmlSer(cfg, metaCache); classHasFields2 = xml.Deserialize( memStream ); } Debug.Assert( trunk._trunk_leaf._leaf_external.ActualProperty == "test_ActualProperty_set_inline" ); //Debug.Assert( classHasFields2._chf_prop._cccwp_propHolder.ActualProperty_NotSerialized == "ActualProperty_NotSerialized_set_in_test_01" ); memStream.Position = 0; var classHasFields3 = new TrunkClass(); { var xml = new ser.XmlSer(cfg, metaCache); xml.DeserializeInto( memStream, classHasFields3 ); } Debug.Assert( trunk._trunk_leaf._leaf_external.ActualProperty == "test_ActualProperty_set_inline" ); //Debug.Assert( classHasFields3._chf_prop._cccwp_propHolder.ActualProperty_NotSerialized == "ActualProperty_NotSerialized_set_in_test_01" ); } }