using System.Collections.Generic; using SimpleJSON; using Luban; {{namespace_with_grace_begin __namespace_with_top_module}} {{~if __this.comment != '' ~}} /// /// {{escape_comment __this.comment}} /// {{~end~}} public {{class_modifier __bean}} class {{__name}} : {{if __parent_def_type}} {{__this.parent}} {{else}} Luban.EditorBeanBase {{end}} { public {{__name}}() { {{~ for field in __fields ~}} {{~if (need_init field.ctype) && !field.ctype.is_nullable ~}} {{format_field_name __code_style field.name}} = {{init_value field.ctype}}; {{~end~}} {{~end~}} } {{~if !__this.is_abstract_type~}} public override void LoadJson(SimpleJSON.JSONObject _json) { {{~ for field in __hierarchy_fields ~}} { var _fieldJson = _json["{{field.name}}"]; if (_fieldJson != null) { {{deserialize '_fieldJson' (format_field_name __code_style field.name) field.ctype}} } } {{~end~}} } public override void SaveJson(SimpleJSON.JSONObject _json) { {{~if parent~}} _json["$type"] = "{{__this.full_name}}"; {{~end~}} {{~ for field in __hierarchy_fields ~}} {{~if field.ctype.is_nullable}} if ({{format_field_name __code_style field.name}} != null) { {{serialize '_json' field.name (format_field_name __code_style field.name) field.ctype}} } {{~else~}} { {{~if (is_raw_nullable field.ctype)}} if ({{format_field_name __code_style field.name}} == null) { throw new System.ArgumentNullException(); } {{~end~}} {{serialize '_json' field.name (format_field_name __code_style field.name) field.ctype}} } {{~end~}} {{~end~}} } {{~end~}} public static {{__name}} LoadJson{{__name}}(SimpleJSON.JSONNode _json) { {{~if __this.is_abstract_type~}} string type = _json["$type"]; {{__name}} obj; switch (type) { {{~for child in __this.hierarchy_not_abstract_children~}} {{~if child.namespace == __this.namespace && __this.namespace != '' ~}} case "{{child.full_name}}": {{~end~}} case "{{impl_data_type child __this}}":obj = new {{child.full_name}}(); break; {{~end~}} default: throw new SerializationException(); } {{~else~}} {{__name}} obj = new {{__this.full_name}}(); {{~end~}} obj.LoadJson((SimpleJSON.JSONObject)_json); return obj; } public static void SaveJson{{__name}}({{__name}} _obj, SimpleJSON.JSONNode _json) { {{~if __this.is_abstract_type~}} _json["$type"] = _obj.GetType().Name; {{~end~}} _obj.SaveJson((SimpleJSON.JSONObject)_json); } {{~ for field in __fields ~}} {{~if field.comment != '' ~}} /// /// {{escape_comment field.comment}} /// {{~end~}} public {{declaring_type_name field.ctype}} {{format_field_name __code_style field.name}}; {{~end~}} } {{namespace_with_grace_end __namespace_with_top_module}}