static void Main(string[] args)
        {
            object o = null;

            o.GetHashCode();
            ABC abc = new ABC();

            abc.GetType();
            Console.ReadLine();
        }
예제 #2
0
        static void Main(string[] args)
        {
            int y = 10;



            A a;
            B b;
            C c;

            a = new A("Dominik", "Karski", 3333, new DateTime(2019, 12, 1), null);
            b = new B("Sebastian", "Kujawski", 9669, new DateTime(2019, 10, 1), null);
            c = new C("Winston", "Churchill", 5321, new DateTime(2020, 1, 2), null);

            a.ObjB = b;
            b.ObjC = c;
            c.ObjA = a;
            int x      = -1;
            ABC holder = a;


            while (x != 0)
            {
                Console.Clear();
                Console.WriteLine("JSON serialization (1)");
                Console.WriteLine("JSON deserialization (2)");
                Console.WriteLine("Custom serialization (3)");
                Console.WriteLine("Custom deserialization (4)");
                Console.WriteLine("Change type from " + holder.GetType().Name + " (5)");
                Console.WriteLine("XML serialization (6)");
                Console.WriteLine("XML deserialization (7)");
                Console.WriteLine("XML to XHTML transformation (8)");
                Console.WriteLine("Quit (0)");
                x = Convert.ToInt32(Console.ReadLine());
                switch (x)
                {
                case 1:
                {
                    JSONSerialization <ABC> serialize = new JSONSerialization <ABC>("ABCConsoleResultJSON.json", holder);
                    serialize.Serialize();
                    Console.WriteLine("Object " + holder.GetType().Name + " serialized to JSON format " + "\n");
                    break;
                }

                case 2:
                {
                    #region jsonschema
                    string schemastr = "";
                    if (holder is A)
                    {
                        schemastr = @"{
    '$schema': 'http://json-schema.org/draft-07/schema',
    '$id': 'http://example.com/example.json',
    'type': 'object',
    'title': 'The root schema',
    'description': 'The root schema comprises the entire JSON document.',
    'default': {},
    'required': [
        '$id',
        '$type',
        'Name',
        'LastName',
        'Number',
        'Date',
        'ObjB'
    ],
    'properties': {
        '$id': {
            '$id': '#/properties/%24id',
            'type': 'string',
            'title': 'The $id schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                '1'
            ]
        },
        '$type': {
            '$id': '#/properties/%24type',
            'type': 'string',
            'title': 'The $type schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                'Zad2Serializer.ObjectModel.A, Zad2Serializer'
            ]
        },
        'Name': {
            '$id': '#/properties/Name',
            'type': 'string',
            'title': 'The Name schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                'Dominik'
            ]
        },
        'LastName': {
            '$id': '#/properties/LastName',
            'type': 'string',
            'title': 'The LastName schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                'Karski'
            ]
        },
        'Number': {
            '$id': '#/properties/Number',
            'type': 'integer',
            'title': 'The Number schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': 0,
            'examples': [
                3333
            ]
        },
        'Date': {
            '$id': '#/properties/Date',
            'type': 'string',
            'title': 'The Date schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                '2019-12-01T00:00:00'
            ]
        },
        'ObjB': {
            '$id': '#/properties/ObjB',
            'type': 'object',
            'title': 'The ObjB schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': {},
            'examples': [
                {
                    '$id': '2',
                    '$type': 'Zad2Serializer.ObjectModel.B, Zad2Serializer',
                    'Name': 'Sebastian',
                    'LastName': 'Kujawski',
                    'Number': 9669,
                    'Date': '2019-10-01T00:00:00',
                    'ObjC': {
                        '$id': '3',
                        '$type': 'Zad2Serializer.ObjectModel.C, Zad2Serializer',
                        'Name': 'Winston',
                        'LastName': 'Churchill',
                        'Number': 5321,
                        'Date': '2020-01-02T00:00:00',
                        'ObjA': {
                            '$ref': '1'
                        }
                    }
                }
            ],
            'required': [
                '$id',
                '$type',
                'Name',
                'LastName',
                'Number',
                'Date',
                'ObjC'
            ],
            'properties': {
                '$id': {
                    '$id': '#/properties/ObjB/properties/%24id',
                    'type': 'string',
                    'title': 'The $id schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        '2'
                    ]
                },
                '$type': {
                    '$id': '#/properties/ObjB/properties/%24type',
                    'type': 'string',
                    'title': 'The $type schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        'Zad2Serializer.ObjectModel.B, Zad2Serializer'
                    ]
                },
                'Name': {
                    '$id': '#/properties/ObjB/properties/Name',
                    'type': 'string',
                    'title': 'The Name schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        'Sebastian'
                    ]
                },
                'LastName': {
                    '$id': '#/properties/ObjB/properties/LastName',
                    'type': 'string',
                    'title': 'The LastName schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        'Kujawski'
                    ]
                },
                'Number': {
                    '$id': '#/properties/ObjB/properties/Number',
                    'type': 'integer',
                    'title': 'The Number schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': 0,
                    'examples': [
                        9669
                    ]
                },
                'Date': {
                    '$id': '#/properties/ObjB/properties/Date',
                    'type': 'string',
                    'title': 'The Date schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        '2019-10-01T00:00:00'
                    ]
                },
                'ObjC': {
                    '$id': '#/properties/ObjB/properties/ObjC',
                    'type': 'object',
                    'title': 'The ObjC schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': {},
                    'examples': [
                        {
                            '$id': '3',
                            '$type': 'Zad2Serializer.ObjectModel.C, Zad2Serializer',
                            'Name': 'Winston',
                            'LastName': 'Churchill',
                            'Number': 5321,
                            'Date': '2020-01-02T00:00:00',
                            'ObjA': {
                                '$ref': '1'
                            }
                        }
                    ],
                    'required': [
                        '$id',
                        '$type',
                        'Name',
                        'LastName',
                        'Number',
                        'Date',
                        'ObjA'
                    ],
                    'properties': {
                        '$id': {
                            '$id': '#/properties/ObjB/properties/ObjC/properties/%24id',
                            'type': 'string',
                            'title': 'The $id schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                '3'
                            ]
                        },
                        '$type': {
                            '$id': '#/properties/ObjB/properties/ObjC/properties/%24type',
                            'type': 'string',
                            'title': 'The $type schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                'Zad2Serializer.ObjectModel.C, Zad2Serializer'
                            ]
                        },
                        'Name': {
                            '$id': '#/properties/ObjB/properties/ObjC/properties/Name',
                            'type': 'string',
                            'title': 'The Name schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                'Winston'
                            ]
                        },
                        'LastName': {
                            '$id': '#/properties/ObjB/properties/ObjC/properties/LastName',
                            'type': 'string',
                            'title': 'The LastName schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                'Churchill'
                            ]
                        },
                        'Number': {
                            '$id': '#/properties/ObjB/properties/ObjC/properties/Number',
                            'type': 'integer',
                            'title': 'The Number schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': 0,
                            'examples': [
                                5321
                            ]
                        },
                        'Date': {
                            '$id': '#/properties/ObjB/properties/ObjC/properties/Date',
                            'type': 'string',
                            'title': 'The Date schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                '2020-01-02T00:00:00'
                            ]
                        },
                        'ObjA': {
                            '$id': '#/properties/ObjB/properties/ObjC/properties/ObjA',
                            'type': 'object',
                            'title': 'The ObjA schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': {},
                            'examples': [
                                {
                                    '$ref': '1'
                                }
                            ],
                            'required': [
                                '$ref'
                            ],
                            'properties': {
                                '$ref': {
                                    '$id': '#/properties/ObjB/properties/ObjC/properties/ObjA/properties/%24ref',
                                    'type': 'string',
                                    'title': 'The $ref schema',
                                    'description': 'An explanation about the purpose of this instance.',
                                    'default': '',
                                    'examples': [
                                        '1'
                                    ]
                                }
                            },
                            'additionalProperties': true
                        }
                    },
                    'additionalProperties': true
                }
            },
            'additionalProperties': true
        }
    },
    'additionalProperties': true
}";
                    }
                    else if (holder is B)
                    {
                        schemastr = @"{
    '$schema': 'http://json-schema.org/draft-07/schema',
    '$id': 'http://example.com/example.json',
    'type': 'object',
    'title': 'The root schema',
    'description': 'The root schema comprises the entire JSON document.',
    'default': {},
    'required': [
        '$id',
        '$type',
        'Name',
        'LastName',
        'Number',
        'Date',
        'ObjC'
    ],
    'properties': {
        '$id': {
            '$id': '#/properties/%24id',
            'type': 'string',
            'title': 'The $id schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                '1'
            ]
        },
        '$type': {
            '$id': '#/properties/%24type',
            'type': 'string',
            'title': 'The $type schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                'Zad2Serializer.ObjectModel.B, Zad2Serializer'
            ]
        },
        'Name': {
            '$id': '#/properties/Name',
            'type': 'string',
            'title': 'The Name schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                'Sebastian'
            ]
        },
        'LastName': {
            '$id': '#/properties/LastName',
            'type': 'string',
            'title': 'The LastName schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                'Kujawski'
            ]
        },
        'Number': {
            '$id': '#/properties/Number',
            'type': 'number',
            'title': 'The Number schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': 0,
            'examples': [
                9669
            ]
        },
        'Date': {
            '$id': '#/properties/Date',
            'type': 'string',
            'title': 'The Date schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                '2019-10-01T00:00:00'
            ]
        },
        'ObjC': {
            '$id': '#/properties/ObjC',
            'type': 'object',
            'title': 'The ObjC schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': {},
            'examples': [
                {
                    '$id': '2',
                    '$type': 'Zad2Serializer.ObjectModel.C, Zad2Serializer',
                    'Name': 'Winston',
                    'LastName': 'Churchill',
                    'Number': 5321,
                    'Date': '2020-01-02T00:00:00',
                    'ObjA': {
                        '$id': '3',
                        '$type': 'Zad2Serializer.ObjectModel.A, Zad2Serializer',
                        'Name': 'Dominik',
                        'LastName': 'Karski',
                        'Number': 3333,
                        'Date': '2019-12-01T00:00:00',
                        'ObjB': {
                            '$ref': '1'
                        }
                    }
                }
            ],
            'required': [
                '$id',
                '$type',
                'Name',
                'LastName',
                'Number',
                'Date',
                'ObjA'
            ],
            'properties': {
                '$id': {
                    '$id': '#/properties/ObjC/properties/%24id',
                    'type': 'string',
                    'title': 'The $id schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        '2'
                    ]
                },
                '$type': {
                    '$id': '#/properties/ObjC/properties/%24type',
                    'type': 'string',
                    'title': 'The $type schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        'Zad2Serializer.ObjectModel.C, Zad2Serializer'
                    ]
                },
                'Name': {
                    '$id': '#/properties/ObjC/properties/Name',
                    'type': 'string',
                    'title': 'The Name schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        'Winston'
                    ]
                },
                'LastName': {
                    '$id': '#/properties/ObjC/properties/LastName',
                    'type': 'string',
                    'title': 'The LastName schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        'Churchill'
                    ]
                },
                'Number': {
                    '$id': '#/properties/ObjC/properties/Number',
                    'type': 'number',
                    'title': 'The Number schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': 0,
                    'examples': [
                        5321
                    ]
                },
                'Date': {
                    '$id': '#/properties/ObjC/properties/Date',
                    'type': 'string',
                    'title': 'The Date schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        '2020-01-02T00:00:00'
                    ]
                },
                'ObjA': {
                    '$id': '#/properties/ObjC/properties/ObjA',
                    'type': 'object',
                    'title': 'The ObjA schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': {},
                    'examples': [
                        {
                            '$id': '3',
                            '$type': 'Zad2Serializer.ObjectModel.A, Zad2Serializer',
                            'Name': 'Dominik',
                            'LastName': 'Karski',
                            'Number': 3333,
                            'Date': '2019-12-01T00:00:00',
                            'ObjB': {
                                '$ref': '1'
                            }
                        }
                    ],
                    'required': [
                        '$id',
                        '$type',
                        'Name',
                        'LastName',
                        'Number',
                        'Date',
                        'ObjB'
                    ],
                    'properties': {
                        '$id': {
                            '$id': '#/properties/ObjC/properties/ObjA/properties/%24id',
                            'type': 'string',
                            'title': 'The $id schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                '3'
                            ]
                        },
                        '$type': {
                            '$id': '#/properties/ObjC/properties/ObjA/properties/%24type',
                            'type': 'string',
                            'title': 'The $type schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                'Zad2Serializer.ObjectModel.A, Zad2Serializer'
                            ]
                        },
                        'Name': {
                            '$id': '#/properties/ObjC/properties/ObjA/properties/Name',
                            'type': 'string',
                            'title': 'The Name schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                'Dominik'
                            ]
                        },
                        'LastName': {
                            '$id': '#/properties/ObjC/properties/ObjA/properties/LastName',
                            'type': 'string',
                            'title': 'The LastName schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                'Karski'
                            ]
                        },
                        'Number': {
                            '$id': '#/properties/ObjC/properties/ObjA/properties/Number',
                            'type': 'number',
                            'title': 'The Number schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': 0,
                            'examples': [
                                3333
                            ]
                        },
                        'Date': {
                            '$id': '#/properties/ObjC/properties/ObjA/properties/Date',
                            'type': 'string',
                            'title': 'The Date schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                '2019-12-01T00:00:00'
                            ]
                        },
                        'ObjB': {
                            '$id': '#/properties/ObjC/properties/ObjA/properties/ObjB',
                            'type': 'object',
                            'title': 'The ObjB schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': {},
                            'examples': [
                                {
                                    '$ref': '1'
                                }
                            ],
                            'required': [
                                '$ref'
                            ],
                            'properties': {
                                '$ref': {
                                    '$id': '#/properties/ObjC/properties/ObjA/properties/ObjB/properties/%24ref',
                                    'type': 'string',
                                    'title': 'The $ref schema',
                                    'description': 'An explanation about the purpose of this instance.',
                                    'default': '',
                                    'examples': [
                                        '1'
                                    ]
                                }
                            },
                            'additionalProperties': true
                        }
                    },
                    'additionalProperties': true
                }
            },
            'additionalProperties': true
        }
    },
    'additionalProperties': true
}";
                    }
                    else if (holder is C)
                    {
                        schemastr = @"{
    '$schema': 'http://json-schema.org/draft-07/schema',
    '$id': 'http://example.com/example.json',
    'type': 'object',
    'title': 'The root schema',
    'description': 'The root schema comprises the entire JSON document.',
    'default': {},
    'required': [
        '$id',
        '$type',
        'Name',
        'LastName',
        'Number',
        'Date',
        'ObjA'
    ],
    'properties': {
        '$id': {
            '$id': '#/properties/%24id',
            'type': 'string',
            'title': 'The $id schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                '1'
            ]
        },
        '$type': {
            '$id': '#/properties/%24type',
            'type': 'string',
            'title': 'The $type schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                'Zad2Serializer.ObjectModel.C, Zad2Serializer'
            ]
        },
        'Name': {
            '$id': '#/properties/Name',
            'type': 'string',
            'title': 'The Name schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                'Winston'
            ]
        },
        'LastName': {
            '$id': '#/properties/LastName',
            'type': 'string',
            'title': 'The LastName schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                'Churchill'
            ]
        },
        'Number': {
            '$id': '#/properties/Number',
            'type': 'number',
            'title': 'The Number schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': 0,
            'examples': [
                5321
            ]
        },
        'Date': {
            '$id': '#/properties/Date',
            'type': 'string',
            'title': 'The Date schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': '',
            'examples': [
                '2020-01-02T00:00:00'
            ]
        },
        'ObjA': {
            '$id': '#/properties/ObjA',
            'type': 'object',
            'title': 'The ObjA schema',
            'description': 'An explanation about the purpose of this instance.',
            'default': {},
            'examples': [
                {
                    '$id': '2',
                    '$type': 'Zad2Serializer.ObjectModel.A, Zad2Serializer',
                    'Name': 'Dominik',
                    'LastName': 'Karski',
                    'Number': 3333,
                    'Date': '2019-12-01T00:00:00',
                    'ObjB': {
                        '$id': '3',
                        '$type': 'Zad2Serializer.ObjectModel.B, Zad2Serializer',
                        'Name': 'Sebastian',
                        'LastName': 'Kujawski',
                        'Number': 9669,
                        'Date': '2019-10-01T00:00:00',
                        'ObjC': {
                            '$ref': '1'
                        }
                    }
                }
            ],
            'required': [
                '$id',
                '$type',
                'Name',
                'LastName',
                'Number',
                'Date',
                'ObjB'
            ],
            'properties': {
                '$id': {
                    '$id': '#/properties/ObjA/properties/%24id',
                    'type': 'string',
                    'title': 'The $id schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        '2'
                    ]
                },
                '$type': {
                    '$id': '#/properties/ObjA/properties/%24type',
                    'type': 'string',
                    'title': 'The $type schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        'Zad2Serializer.ObjectModel.A, Zad2Serializer'
                    ]
                },
                'Name': {
                    '$id': '#/properties/ObjA/properties/Name',
                    'type': 'string',
                    'title': 'The Name schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        'Dominik'
                    ]
                },
                'LastName': {
                    '$id': '#/properties/ObjA/properties/LastName',
                    'type': 'string',
                    'title': 'The LastName schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        'Karski'
                    ]
                },
                'Number': {
                    '$id': '#/properties/ObjA/properties/Number',
                    'type': 'number',
                    'title': 'The Number schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': 0,
                    'examples': [
                        3333
                    ]
                },
                'Date': {
                    '$id': '#/properties/ObjA/properties/Date',
                    'type': 'string',
                    'title': 'The Date schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': '',
                    'examples': [
                        '2019-12-01T00:00:00'
                    ]
                },
                'ObjB': {
                    '$id': '#/properties/ObjA/properties/ObjB',
                    'type': 'object',
                    'title': 'The ObjB schema',
                    'description': 'An explanation about the purpose of this instance.',
                    'default': {},
                    'examples': [
                        {
                            '$id': '3',
                            '$type': 'Zad2Serializer.ObjectModel.B, Zad2Serializer',
                            'Name': 'Sebastian',
                            'LastName': 'Kujawski',
                            'Number': 9669,
                            'Date': '2019-10-01T00:00:00',
                            'ObjC': {
                                '$ref': '1'
                            }
                        }
                    ],
                    'required': [
                        '$id',
                        '$type',
                        'Name',
                        'LastName',
                        'Number',
                        'Date',
                        'ObjC'
                    ],
                    'properties': {
                        '$id': {
                            '$id': '#/properties/ObjA/properties/ObjB/properties/%24id',
                            'type': 'string',
                            'title': 'The $id schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                '3'
                            ]
                        },
                        '$type': {
                            '$id': '#/properties/ObjA/properties/ObjB/properties/%24type',
                            'type': 'string',
                            'title': 'The $type schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                'Zad2Serializer.ObjectModel.B, Zad2Serializer'
                            ]
                        },
                        'Name': {
                            '$id': '#/properties/ObjA/properties/ObjB/properties/Name',
                            'type': 'string',
                            'title': 'The Name schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                'Sebastian'
                            ]
                        },
                        'LastName': {
                            '$id': '#/properties/ObjA/properties/ObjB/properties/LastName',
                            'type': 'string',
                            'title': 'The LastName schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                'Kujawski'
                            ]
                        },
                        'Number': {
                            '$id': '#/properties/ObjA/properties/ObjB/properties/Number',
                            'type': 'number',
                            'title': 'The Number schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': 0,
                            'examples': [
                                9669
                            ]
                        },
                        'Date': {
                            '$id': '#/properties/ObjA/properties/ObjB/properties/Date',
                            'type': 'string',
                            'title': 'The Date schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': '',
                            'examples': [
                                '2019-10-01T00:00:00'
                            ]
                        },
                        'ObjC': {
                            '$id': '#/properties/ObjA/properties/ObjB/properties/ObjC',
                            'type': 'object',
                            'title': 'The ObjC schema',
                            'description': 'An explanation about the purpose of this instance.',
                            'default': {},
                            'examples': [
                                {
                                    '$ref': '1'
                                }
                            ],
                            'required': [
                                '$ref'
                            ],
                            'properties': {
                                '$ref': {
                                    '$id': '#/properties/ObjA/properties/ObjB/properties/ObjC/properties/%24ref',
                                    'type': 'string',
                                    'title': 'The $ref schema',
                                    'description': 'An explanation about the purpose of this instance.',
                                    'default': '',
                                    'examples': [
                                        '1'
                                    ]
                                }
                            },
                            'additionalProperties': true
                        }
                    },
                    'additionalProperties': true
                }
            },
            'additionalProperties': true
        }
    },
    'additionalProperties': true
}";
                    }
                    #endregion

                    JSchema schema = JSchema.Parse(schemastr);

                    string fileName = "ABCConsoleJsonDesTmp.json";
                    JSONSerialization <ABC> serialize = new JSONSerialization <ABC>(fileName, holder);
                    serialize.Serialize();
                    string  jsonText   = File.ReadAllText(fileName);
                    JObject schemaTest = JObject.Parse(jsonText);

                    IList <string> errorMessages;
                    bool           valid = schemaTest.IsValid(schema, out errorMessages);

                    if (valid)
                    {
                        ABC desResult = serialize.Deserialize();
                        Console.WriteLine("Object " + holder.GetType().Name + " deserialized from JSON format" + "\n");
                        Console.WriteLine(desResult.ToString());
                        File.Delete(fileName);
                        break;
                    }
                    foreach (var e in errorMessages)
                    {
                        Console.WriteLine(e);
                    }

                    Console.WriteLine("Validation Error");
                    File.Delete(fileName);
                    break;
                }

                case 3:
                {
                    CustomSerialization <ABC> serialize = new CustomSerialization <ABC>("ABCConsoleSerializationResultCustom.txt", holder);
                    serialize.Serialize();
                    Console.WriteLine("Object " + holder.GetType().Name + " serialized to custom format " + "\n");
                    break;
                }

                case 4:
                {
                    string fileName = "ABCConsoleCustomDesTmp.txt";
                    CustomSerialization <ABC> serialize = new CustomSerialization <ABC>(fileName, holder);
                    serialize.Serialize();
                    ABC desResult = serialize.Deserialize();
                    Console.WriteLine("Object " + holder.GetType().Name + " deserialized from Custom format" + "\n");
                    Console.WriteLine(desResult.ToString());
                    File.Delete(fileName);
                    break;
                }

                case 5:
                {
                    holder = changeType(a, b, c);
                    Console.WriteLine("Object type changed to " + holder.GetType().Name);
                    break;
                }

                case 6:
                {
                    XMLSerialization <ABC> serialize = new XMLSerialization <ABC>("ABCConsoleResultXML.xml", holder);
                    serialize.Serialize();
                    Console.WriteLine("Object " + holder.GetType().Name + " serialized to XML format" + "\n");
                    break;
                }

                case 7:
                {
                    string fileName = "ABCDeserializeXMLtmp.xml";
                    XMLSerialization <ABC> serialize = new XMLSerialization <ABC>(fileName, holder);
                    serialize.Serialize();
                    serialize.Validation = true;
                    ABC desResult = serialize.Deserialize();
                    Console.WriteLine("Object " + holder.GetType().Name + " deserialized from XML format" + "\n");
                    Console.WriteLine(desResult.ToString());
                    File.Delete(fileName);
                    break;
                }

                case 8:
                {
                    Console.WriteLine("Level of recursion: ");
                    y = Convert.ToInt32(Console.ReadLine());
                    string fileName = "ABCConsoleResultXML.xml";
                    if (!File.Exists(fileName))
                    {
                        Console.WriteLine("Nie odnaleziono pliku xml.");
                        break;
                    }

                    XPathDocument myXPathDoc = new XPathDocument(fileName);


                    string xsltCode = "<?xml version='1.0' encoding='UTF-8'?><xsl:stylesheet version ='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:json='http://james.newtonking.com/projects/json'><xsl:output method = 'xml' doctype-system='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd' doctype-public='-//W3C//DTD XHTML 1.0 Transitional//EN' indent='yes' omit-xml-declaration='yes'/><xsl:template name = 'writeobj' ><xsl:param name = 'obj' select='root'/>	<xsl:param name = 'count' select='1'/><xsl:choose><xsl:when test = '$obj/@json:ref' ><xsl:call-template name = 'writeobj' > <xsl:with-param name = 'obj' select='root'/><xsl:with-param name = 'count' select='$count'/></xsl:call-template></xsl:when><xsl:otherwise><xsl:if test='$count > 0'><tr xmlns = 'http://www.w3.org/1999/xhtml' xml:lang='pl' lang='pl' >Type: <xsl:value-of select = '$obj/@json:type' />Name: <xsl:value-of select = '$obj/Name' />LastName: <xsl:value-of select = '$obj/LastName' />Number: <xsl:value-of select = '$obj/Number' />Date: <xsl:value-of select = '$obj/Date'/><xsl:if test='$count > 1'>ObjRef: </xsl:if></tr> <xsl:if test='$obj/ObjA'><xsl:call-template name = 'writeobj' ><xsl:with-param name = 'obj' select='$obj/ObjA'/><xsl:with-param name = 'count' select='$count - 1'/></xsl:call-template></xsl:if><xsl:if test='$obj/ObjB'><xsl:call-template name = 'writeobj' ><xsl:with-param name = 'obj' select='$obj/ObjB'/><xsl:with-param name = 'count' select='$count - 1'/></xsl:call-template></xsl:if><xsl:if test='$obj/ObjC'><xsl:call-template name = 'writeobj' ><xsl:with-param name = 'obj' select='$obj/ObjC'/><xsl:with-param name ='count' select='$count - 1'/></xsl:call-template> </xsl:if></xsl:if></xsl:otherwise></xsl:choose></xsl:template> <xsl:template match = '/' ><html xmlns='http://www.w3.org/1999/xhtml' xml:lang='pl' lang='pl'><head> <title>Wynik serializacji</title> <style type = 'text/css' >mh2{,font - family: Helvetica;,margin - left: 2 %;,}   </style> </head>  <body style = 'background-color:#2c2f33; color:#7289da' ><table style='background-color:#222222'  xmlns='http://www.w3.org/1999/xhtml' xml:lang='pl' lang='pl' ><xsl:call-template name = 'writeobj' ><xsl:with-param name = 'obj' select='root'/><xsl:with-param name = 'count' select='"+ y + "'/></xsl:call-template></table> </body> </html></xsl:template>	</xsl:stylesheet>";

                    XslCompiledTransform objXslTrans = new XslCompiledTransform();
                    objXslTrans.Load(new XmlTextReader(new StringReader(xsltCode)));

                    XmlTextWriter myWriter = new XmlTextWriter("result.xhtml", null);
                    objXslTrans.Transform(myXPathDoc, null, myWriter);
                    myWriter.Close();

                    Console.WriteLine("Stworzono plik result.xhtml");
                    break;
                }
                }
                Console.WriteLine("\n" + "Press Key to Continue");
                Console.ReadKey();
            }
        }