рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореИрдВ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдХреАрдорд╛ рд╕рдВрдкрд╛рджрдХ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕ рдХрд╛рдо рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдЕрд░реНрдерд╛рддреН рдХреНрд░рдордмрджреНрдзрддрд╛ рдФрд░ рдбреАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпреЛрдЬрдирд╛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рддрддреНрд╡реЛрдВ (рдХреЛрдиреЗ) рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд▓ рд╡рд░реНрдЧ рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрдиреЗ рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ (рддреАрд░) рдХреЗ рд▓рд┐рдВрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рд╡рд░реНрдЯрд┐рдХрд▓ рд╕реНрд╡рдпрдВ рдХреЛ рд╕реАрдзреЗ рдпрд╛ рдЕрдиреНрдп рд╡рд░реНрдЯрд┐рдХрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рдирдХ JSON.stringify рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╕реАрд░рд┐рдпрд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬреЛ рд╡рд░реНрдгрд┐рдд рджреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ:
- рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рджреМрд░рд╛рди рд╡рд░реНрдЧ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмрдЪрд╛рдиреЗ рдФрд░ deserialization рдХреЗ рджреМрд░рд╛рди рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
- рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓рд┐рдВрдХ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рд╕рд╣рд┐рдд рдЪрдХреНрд░реАрдпред
рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрдпрд╛рди рдФрд░ рдЗрд╕рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВред
рдЬреАрдердм рд╕реАрд░рд┐рдпрд▓ рд╕реАрд░рд┐рдпрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ
рдЬреАрдердм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ : рд▓рд┐рдВрдХ ред
рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░реАрдХреНрд╖рдг-src рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рднреА рд╣реИрдВред
рдкреБрдирд░рд╛рд╡рд░реНрддреА рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ: рд▓рд┐рдВрдХ ред
рдлреНрд▓реИрдЯ рдХреНрд░рдорд╛рдВрдХрдХ: рд▓рд┐рдВрдХ ред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдиреЛрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп рд╕рдВрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП рдордирдорд╛рдиреЗ рд╕рд░реНрдХрд┐рдЯ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рд╣реИред рд╕рдВрдкрд╛рджрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд╛рд░реНрдп рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо ES6 рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд░рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдпреЛрдЬрдирд╛ рдХрд╛ рдФрдкрдЪрд╛рд░рд┐рдХ рд╡рд┐рд╡рд░рдг рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдореБрдЭреЗ рдЕрдзрд┐рдХрддрдо рджреЛ рдорд╛рдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреА рдЙрдкрдпреБрдХреНрдд рддрд╕реНрд╡реАрд░ рдорд┐рд▓реА:

рдпрд╣рд╛рдВ рдореБрдЭреЗ рдпрд╣ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрд╡рд▓рдкрд░ рдирд╣реАрдВ рд╣реВрдВ, рдФрд░ рдореЗрд░реА "рдореВрд▓" рднрд╛рд╖рд╛ C # рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг C # рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рдЕрдиреБрднрд╡ рд╕реЗ рддрдп рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдЖрд░реЗрдЦ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд┐рд░реЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ (рд╕рд╢рд░реНрдд рдирд╛рдо рдФрд░ рд╡рд┐рд╢реЗрд╖ рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдирд┐рднрд╛рддреЗ рд╣реИрдВ):
- рдкреНрд░рд╛рд░рдВрдн рд╢реАрд░реНрд╖ (рдкреНрд░рд╛рд░рдВрдн)
- рдЕрдВрддрд┐рдо рд╢рд┐рдЦрд░ (рд╕рдорд╛рдкреНрдд)
- рдЯреАрдо рдЯреЙрдк (рдХрдорд╛рдВрдб)
- рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╡рд░реНрдЯреЗрдХреНрд╕ (рд▓реЗрдЯ)
- рд╕рддреНрдпрд╛рдкрди рд╕рддреНрдпрд╛рдкрди рд╢реАрд░реНрд╖ (рдпрджрд┐)
рдЗрди рд╢реАрд░реНрд╖реЛрдВ рдХреЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдпрд╛ рд╢рдмреНрджрд╛рд░реНрде рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдХреБрдЫ рдЕрдВрддрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рдЖрдзрд╛рд░ рд╡рд░реНрдЯреЗрдХреНрд╕ (рдиреЛрдб) рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВред рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░, рдиреЛрдб рд╡рд░реНрдЧ рдореЗрдВ, рд▓рд┐рдВрдХ рдлрд╝реАрд▓реНрдб рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдиреНрдп рдХреЛрдиреЗ рдХреЗ рд▓рд┐рдВрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдРрдб рд▓рд┐рдВрдХ рд╡рд┐рдзрд┐ рдЗрди рд▓рд┐рдВрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рдЖрдЗрдП рдЙрд╕ рдХреЛрдб рдХреЛ рд▓рд┐рдЦреЗрдВ рдЬреЛ рдЪрд┐рддреНрд░ рд╕реЗ рд╕рд░реНрдХрд┐рдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред
рдПрд▓реНрдЧреЛрд░рд┐рдердо рдбрд┐рдЬрд╛рдЗрди рдХреЛрдб рдпрджрд┐ рд╣рдо JSON.stringify рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕реНрдХреАрдорд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХреБрдЫ рднрдпрд╛рдирдХ рдорд┐рд▓рддрд╛ рд╣реИред рдореИрдВ рдкрд░рд┐рдгрд╛рдо рдХреА рдкрд╣рд▓реА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рджреВрдВрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реАрдВ:
JSON.stringify рдкрд░рд┐рдгрд╛рдо [ { "id": "d9c8ab69-e4fa-4433-80bb-1cc7173024d6", "name": "Start", "links": { "2e3d482b-187f-4c96-95cd-b3cde9e55a43": { "id": "2e3d482b-187f-4c96-95cd-b3cde9e55a43", "target": { "id": "f87a3913-84b0-4b70-8927-6111c6628a1f", "name": "Command", "links": { "4f623116-1b70-42bf-8a47-da1e9be5e4b2": { "id": "4f623116-1b70-42bf-8a47-da1e9be5e4b2", "target": { "id": "94a47403-13ab-4c83-98fe-3b201744c8f2", "name": "If", "links": { ...
рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╢реАрд░реНрд╖ рдореЗрдВ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдерд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдлрд┐рд░ рдЗрд╕рдХреЗ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреВрд░реЗ рд╕рд░реНрдХрд┐рдЯ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдлрд┐рд░ рджреВрд╕рд░реА рдЪреЛрдЯреА рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рд╕рдм рдХреБрдЫ рдЬреЛ рдЙрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдерд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЖрдк рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдХреЗрд╡рд▓ рдЗрд╕ рд╣реИрд╢ рд╕реЗ рдореВрд▓ рд▓рд┐рдВрдХ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдпрджрд┐ рдХрд┐рд╕реА рднреА рдХреЛрдиреЗ рдореЗрдВ рд╕реАрдзреЗ рдпрд╛ рдЕрдиреНрдп рдХреЛрдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреБрдж рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдПрдХ рдЕрдирдХреИрдкреНрдб рдЯрд╛рдЗрдк рдЯрд╛рдЗрдк: рдереНрд░реЛ рдХреЛ: JSON рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рд╕рд░реНрдХреБрд▓рд░ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ: https://jsfiddle.net/L4guo863/ ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, JSON рдореЗрдВ рд╕реНрд░реЛрдд рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдордЭрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрд░рдорд╛рдВрдХрди рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдерд╛ред
рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдСрдирд▓рд╛рдЗрди рдЧрдпрд╛ рдФрд░ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рд▓рдЧрд╛ред рдХрдИ рдереЗ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрд╣реБрдд рднрд╛рд░реА рдереЗ рдпрд╛ рдХреНрд░рдордмрджреНрдз рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЗрд╕рд▓рд┐рдП рдЕрдкрдиреА рдмрд╛рдЗрдХ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рд╣рд╛рдВ, рдореБрдЭреЗ рд╕рд╛рдЗрдХрд┐рд▓ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИред
рд╕реАрд░рд┐рдпрд▓ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛
рдпрд╣ рдЦрдВрдб рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рд╡рд╕реНрддреБрддрдГ рдореЗрд░реЗ рд╕рд╛рде рдХреНрд░рдордмрджреНрдз рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдмрдирд╛рдиреЗ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреА рдХрдореА рд╣реИ рдЬреЛ рд╕реА # рдпрд╛ рдЬрд╛рд╡рд╛ (рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм) рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрджреНрднреБрдд рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИред рджреВрд╕рд░реА рдУрд░, рдореБрдЭреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдХреНрд╖реЗрддреНрд░, рд╕рддреНрдпрд╛рдкрди рдФрд░ рдЕрдиреНрдп рдЪрд┐рдкреНрд╕ рдХреА рд╕реВрдЪреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╕реБрдкрд░ рдЬрдЯрд┐рд▓ рдХреНрд░рдорд╛рдВрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рдирд╛ рдФрд░ рд╕рд╛рдзрд╛рд░рдг JSON.stringify рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдХреНрд░рдорд╛рдВрдХрд┐рдд рдХрд░рдирд╛ рд╣реИред
рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрддреЗ рд╕рдордп, рдореБрдЭреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦ рдорд┐рд▓рд╛, рдЬрд┐рд╕рдХрд╛ рд╢реАрд░реНрд╖рдХ "JSON рдореЗрдВ рдЯрд╛рдЗрдк рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП 6 рдЧрд▓рдд рддрд░реАрдХреЗ" рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рддрд░реАрдХреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рдФрд░ рдореИрдВрдиреЗ рдирдВрдмрд░ 5 рдкрд░ рдПрдХ рдХреЛ рдЪреБрдирд╛ред рдпрджрд┐ рдЖрдк рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛: рдЬрдм рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрд╕реЗ рдХреЗрд╡рд▓ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВред рдПрдХ рдлрд╝реАрд▓реНрдб рдЬрд┐рд╕рдХрд╛ рдирд╛рдо "@<type>"
рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реИ рдФрд░ рдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдбреЗрдЯрд╛ рд╣реИред рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рд╣рдо рдЯрд╛рдЗрдк рдирд╛рдо рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдлреАрд▓реНрдб рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВред
рдпрджрд┐ рд╣рдо рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд▓рд┐рдВрдХ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рдирдХ JSON.stringify рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддрд╛ рд╣реИ:
JSON.stringify [ { "id": "d04d6a58-7215-4102-aed0-32122e331cf4", "name": "Start", "links": {} }, { "id": "5c58c3fc-8ce1-45a5-9e44-90d5cebe11d3", "name": "Command", "links": {}, "command": " A, B" }, ... }
рдФрд░ рд╣рдорд╛рд░реЗ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рдкреЗрдЯреЗрдВрдЧреЗ:
рдХреНрд░рдордмрджреНрдзрддрд╛ рдкрд░рд┐рдгрд╛рдо [ { "@Schema.Start": { "id": "d04d6a58-7215-4102-aed0-32122e331cf4", "name": "Start", "links": {} } }, { "@Schema.Command": { "id": "5c58c3fc-8ce1-45a5-9e44-90d5cebe11d3", "name": "Command", "links": {}, "command": " A, B" } }, ... }
рдмреЗрд╢рдХ, рдПрдХ рдЦрд╛рдореА рд╣реИ: рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдХрд╛ рдирд╛рдо рдХреБрддреНрддреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рд╕рдордЭреМрддреЗ рд╕реЗ рдпрд╛ рдХреБрддреНрддреЗ рдХреЗ рдкреНрд░рддреАрдХ рдХреЛ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рд╕реЗ рдмрджрд▓рдХрд░ рд╣рд▓ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣рд▓ рдХреА рдЬрд╛рддреА рд╣реИ (рдиреАрдЪреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛)ред рд╣рдо рдареАрдХ-рдареАрдХ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ?
рд▓рд┐рдВрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди
рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрднреА рднреА рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред
рдЬрдм рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдХреНрд░рдорд╛рдВрдХрди рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВрдЧреЗред рдЕрдЧрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рд╣рдо рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ (рдлрд╝реАрд▓реНрдб рдирд╛рдо "@<type>|<index>"
) рдХрд╛ рд░реВрдк рд▓реЗрдЧрд╛, рдФрд░ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╣рдо рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдВрдХ рдбрд╛рд▓реЗрдВрдЧреЗ;
{ "@<type>": <index> }
рдЗрд╕ рдкреНрд░рдХрд╛рд░, deserialization рдХреЗ рджреМрд░рд╛рди, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдореВрд▓реНрдп рдХреНрдпрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХреИрд╢ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдпрд╣ рдЙрд╕рдХреА рдкрд╣рд▓реА рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИред
рдЖрдЗрдП рдпреЛрдЬрдирд╛ рдХреЗ рдкрд╣рд▓реЗ рд╢реАрд░реНрд╖ рд╕реЗ рджреВрд╕рд░реЗ рддрдХ рд▓рд┐рдВрдХ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВ:
рдХреНрд░рдордмрджреНрдзрддрд╛ рдкрд░рд┐рдгрд╛рдо [ { "@Schema.Start": { "id": "a26a3a29-9462-4c92-8d24-6a93dd5c819a", "name": "Start", "links": { "25fa2c44-0446-4471-a013-8b24ffb33bac": { "@Schema.Link": { "id": "25fa2c44-0446-4471-a013-8b24ffb33bac", "target": { "@Schema.Command|1": { "id": "4f4f5521-a2ee-4576-8aec-f61a08ed38dc", "name": "Command", "links": {}, "command": " A, B" } } } } } } }, { "@Schema.Command": 1 }, ... }
рдпрд╣ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреВрд╕рд░реЗ рд╢реАрд░реНрд╖ рдХреЛ рдкрд╣рд▓реЗ рд▓рд┐рдВрдХ рд╕рдВрдЪрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд╣рд▓реЗ рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХрд╛ рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдпрд╛, рдЬреЛ рдкреЗрдбрд╝ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ "рд╕реАрдврд╝реА" рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реАрд░рд┐рдпрд▓ рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛
рдпрд╣ рдЦрдВрдб рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рд░рд┐рдХреНрдд
рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХреА рддрд░рд╣, рд╣рдорд╛рд░реЗ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рджреЛ рддрд░реАрдХреЗ рд╣реЛрдВрдЧреЗ - рдХреНрд░рдордмрджреНрдз рдФрд░ рдирд┐рд░реНрдЬрдиред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЛ рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдП рдЬреЛ рдЗрд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рд░рдЬрд┐рд╕реНрдЯрд░) рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рдЬрд┐рдиреНрд╣реЗрдВ (рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ) рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред DOM рддрддреНрд╡реЛрдВ, JQuery рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рдХреНрд░рдорд╛рдВрдХрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрд░рдордмрджреНрдз рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдореИрдВ рдПрдХ рд╢реАрд░реНрд╖ рдпрд╛ рд▓рд┐рдВрдХ рдХреЗ рдЕрдиреБрд░реВрдк рдПрдХ рджреГрд╢реНрдп рддрддреНрд╡ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирд╣реАрдВ рдЧрд┐рд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд░ рд╢реЗрд▓ рдХреЛрдб export default class Serializer { constructor() { this._nameToCtor = [];
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгред
рдХрдХреНрд╖рд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рджреЛ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рд╡рд┐рдзрд┐ рдкрд╛рд╕ рдХрд░рдиреА рд╣реЛрдЧреА:
- рд░рдЬрд┐рд╕реНрдЯрд░ (MyClass)
- рд░рдЬрд┐рд╕реНрдЯрд░ ('MyNamespace.MyClass', MyClass)
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрд▓рд╛рд╕ рдХрд╛ рдирд╛рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди (IE рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ) рдХреЗ рдирд╛рдо рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛, рджреВрд╕рд░реЗ рдореЗрдВ рдЖрдк рд╕реНрд╡рдпрдВ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВрдЧреЗред рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдирд╛рдорд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдкрд╣рд▓реЗ, рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛, рдирд┐рд░реНрдорд┐рдд рдХреНрд░рдордмрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХрд╛ рдЖрд░рдВрдн рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
import Schema from './schema'; ...
рд╕реНрдХреАрдорд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рднреА рд╡рд░реНрдЯреЗрдХреНрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреНрд▓рд╛рд╕ рдкрдВрдЬреАрдХрд░рдг рдХреЛрдб рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред
рдХреНрд░рдордмрджреНрдзрддрд╛ рдФрд░ рдирд┐рд░реНрдЬрдирддрд╛ рдХрд╛ рдкреНрд░рд╕рдВрдЧ
рдЖрдкрдиреЗ рдХреНрд░рд┐рдкреНрдЯрд┐рдХ SerializationContext рдФрд░ DeserializationContext рд╡рд░реНрдЧреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рд╕рднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд░рдорд╛рдВрдХрди / deserialization рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдордзреНрдпрд╡рд░реНрддреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдЕрдиреБрдХреНрд░рдорд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рдХреИрд╢ рдФрд░ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ред
SerializationContext
рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХреЗрд╡рд▓ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХрд╛ "рдлреНрд▓реИрдЯ" рд╕рдордХрдХреНрд╖ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рдкреЗрдбрд╝ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рднрд┐рдиреНрди рд╣реИред
рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
constructor(ser) { this.__proto__.__proto__ = ser; this.cache = [];
рдореИрдВ this.__proto__.__proto__ = ser;
рд░рд╣рд╕реНрдпрдордп рд░реЗрдЦрд╛ рд╕рдордЭрд╛рдиреЗ рдХреА this.__proto__.__proto__ = ser;
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдЗрдирдкреБрдЯ рдкрд░, рд╣рдо рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡рдпрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд▓рд╛рдЗрди рдЗрд╕рдореЗрдВ рд╕реЗ рд╣рдорд╛рд░реА рдХреНрд▓рд╛рд╕ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддреА рд╣реИред рдпрд╣ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░рдорд┐рдХ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, this._ignore
рд╕реНрд╡рдпрдВ рдХреЛ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреА рдЕрдирджреЗрдЦреА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА ("рдмреНрд▓реИрдХ рд▓рд┐рд╕реНрдЯ") рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред рдЕрдиреНрдпрдерд╛, рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ this._serializer._ignore
ред
рдореБрдЦреНрдп рдХреНрд░рдорд╛рдВрдХрди рд╡рд┐рдзрд┐:
serialize(val) { if (Array.isArray(val)) {
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рддреАрди рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рд╣реИрдВ рдЬреЛ рд╣рдо рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ: рд╕рд░рдгрд┐рдпрд╛рдБ, рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рд╕рд░рд▓ рдорд╛рдиред рдпрджрд┐ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ "рдмреНрд▓реИрдХ рд▓рд┐рд╕реНрдЯ" рдореЗрдВ рд╣реИ, рддреЛ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рд╣реИред
рд╕рд░рдгреА рдХреНрд░рдорд╛рдВрдХрди:
serializeArray(val) { let res = []; for (let item of val) { let e = this.serialize(item); if (typeof e !== 'undefined') res.push(e); } return res; }
рдЖрдк рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ред рдпрджрд┐ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рдЧреИрд░-рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рд╢реНрд░реЗрдгреА рд╣реИ, рддреЛ рдЗрд╕ рдЬрд╛рдВрдЪ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рд╕рд░рдгреА рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧреА, рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рднреА, рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдмрд┐рдирд╛ рдЪрд╛рдмреА рдХреЗ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, JSON.stringify рдХреЛ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгрд┐рдпрд╛рдБ рднреА рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИрдВред
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд░рдорд╛рдВрдХрди:
рдХреЛрдб serializeObject(val) { let name = this._ctorToName[val.constructor]; if (name) {
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХрд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЗрд╕рдХрд╛ рджрд┐рд▓ рд╣реИред рдЪрд▓реЛ рдЗрд╕реЗ рдЕрд▓рдЧ рд▓реЗ рдЬрд╛рдУред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП serializeObjectInner
рдпреВрдЯрд┐рд▓рд┐рдЯреА рдореЗрдердб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдиреНрдпрдерд╛, рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡рд╕реНрддреБ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рд░рд▓ рдХрд╛рдЙрдВрдЯрд░ рд╡реЗрд░рд┐рдПрдмрд▓ рд╣реИ рдЬреЛ рд╕рднреА рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╢ рдореЗрдВ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреИрд╢ рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рдмрд┐рдирд╛ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕реНрд╡рдпрдВ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЖрдкрдХреЛ рдкреВрд░реЗ рдХреИрд╢ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣рд╛рдВ рдпрд╣ рдХреБрдВрдЬреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рддреЗрдЬ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рджреЛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП __uid рдлрд╝реАрд▓реНрдб рдЕрдиреНрдп рдирд┐рдЬреА рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб рдХреА рддрд░рд╣ рдкрд░рд┐рдгрд╛рдореА рдЬрд╕рди рдореЗрдВ рдирд╣реАрдВ рдЧрд┐рд░реЗрдЧрд╛ред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рддрд░реНрдХ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛, __uuid рдХреЗ рдорд╛рди рд╕реЗ , рд╣рдо рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреИрд╢ ( рдХреИрд╢реНрдб ) рдореЗрдВ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред
рдпрджрд┐ рдРрд╕реА рдХреЛрдИ рд╡рд╕реНрддреБ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдореВрд▓реНрдп рдкрд╣рд▓реЗ рд╣реА рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рд╣реЛ рдЪреБрдХрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдпрд╣ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
if (!cached.index) {
рдХреЛрдб рднреНрд░рд╛рдордХ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЙрди рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдХреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдЬрдм рд╕рдВрдЦреНрдпрд╛ рдХреЗрд╡рд▓ рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕реМрдВрдкреА рдЬрд╛рдП, рдЬрд┐рдирдХреЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд▓рд┐рдВрдХ рд╣реИрдВред
рдЬрдм рдирдВрдмрд░ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рд┐рдВрдХ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ:
рдпрджрд┐ рдкрд╣рд▓реА рдмрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реАрд░рд┐рдпрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕рдХреЗ рдХреИрд╢ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ:
let res; let cached = { ref: { [`@${name}`]: {} } }; this.cache[val.__uuid] = cached;
рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ:
if (typeof val.serialize === 'function') {
рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдорд╛рдВрдХрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рдВрдЪ рд╣реИ (рдЬрд┐рд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА), рд╕рд╛рде рд╣реА Object.keys(cached.ref)[0]
ред Object.keys(cached.ref)[0]
рдХрд╛ рдирд┐рд░реНрдорд╛рдг Object.keys(cached.ref)[0]
ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ caked.ref рд░реИрдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ { "@<type>[|<index>]": <> }
, рд▓реЗрдХрд┐рди рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдо рдЕрднреА рддрдХ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдирд╛рдо рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдирдВрдмрд░ (рдЗрдВрдбреЗрдХреНрд╕) рд╣реЛрдЧрд╛ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдХреЗрд╡рд▓ рд╡рд╕реНрддреБ рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рдПрдХрдорд╛рддреНрд░ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдВрдЯрд░реНрдирд▓ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд┐рдзрд┐:
serializeObjectInner(val) { let res = {}; for (let key of Object.getOwnPropertyNames(val)) { if (!(isString(key) && key.startsWith('__'))) {
рд╣рдо рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рд╕реЗ рдлрд╝реАрд▓реНрдб рдХреЛ рдЙрд╕рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред
DeserializationContext
Deserialization рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдХреЛрдб /** * */ class DeserializationContext { /** * * @param {Serializer} ser */ constructor(ser) { this.__proto__.__proto__ = ser; this.cache = []; // } /** * json * @param {any} val json * @returns {any} */ deserialize(val) { if (Array.isArray(val)) { // return this.deserializeArray(val); } else if (isObject(val)) { // return this.deserializeObject(val); } else { // return val; } } /** * * @param {Object} val * @returns {Object} */ deserializeArray(val) { return val.map(item => this.deserialize(item)); } /** * * @param {Array} val * @returns {Array} */ deserializeObject(val) { let res = {}; for (let key of Object.getOwnPropertyNames(val)) { let data = val[key]; if (isString(key) && key.startsWith('@')) { // if (isInteger(data)) { // res = this.cache[data]; if (res) { return res; } else { console.error(` ${data}`); return data; } } else { // let [name, id] = key.substr(1).split('|'); let ctor = this._nameToCtor[name]; if (ctor) { // res = new ctor(); // , if (id) this.cache[id] = res; if (typeof res.deserialize === 'function') { // res.deserialize(data); } else { // for (let key of Object.getOwnPropertyNames(data)) { res[key] = this.deserialize(data[key]); } } return res; } else { // console.error(` "${name}" .`); return val[key]; } } } else { // res[key] = this.deserialize(val[key]); } } return res; } }
рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рд╕рд░рд▓реАрдХрд░рдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреЛрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд╡рд░реНрдЧ рдХреНрд░рдордмрджреНрдз рдФрд░ рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрди рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд░рдорд╢рдГ рдХреНрд░рдорд╛рдВрдХрди / рдбреАрд╕рд░реНрд╡рд┐рд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдкрдХреЛ рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджрд┐рдирд╛рдВрдХ рдХреЗ рд▓рд┐рдП:
рдЖрдИрдПрд╕рдУ рдкреНрд░рд╛рд░реВрдк рдХреЛ рджрд┐рдирд╛рдВрдХрд┐рдд рдХрд░реЗрдВ Date.prototype.serialize = function () { return this.toISOString(); }; Date.prototype.deserialize = function (val) { let date = new Date(val); this.setDate(date.getDate()); this.setTime(date.getTime()); };
рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рджрд┐рдирд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ: serializer.register(Date);
ред
рдкрд░рд┐рдгрд╛рдо:
{ "@Date": "2018-06-02T20:41:06.861Z" }
рдХреЗрд╡рд▓ рд╕реАрдорд╛: рдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреВрд░реНрдгрд╛рдВрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕реА рддрд░рд╣, рдЖрдк рд╕рд╛рдзрд╛рд░рдг рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рддрд╛рд░ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░рдВрдЧ рд╡рд░реНрдЧ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг, рдЬреЛ рд░рдВрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рд▓рд╛рдЗрди рдкрд░ #rrggbb
рдкрд░ рд╣реИред
рд╕рдкрд╛рдЯ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП, рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ, рдореИрдВрдиреЗ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХрд╛ рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦрд╛ рд╣реИ, рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреЗрдбрд╝ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рддрд╛ рд╣реИред
рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдорд╛рд░реА рдпреЛрдЬрдирд╛ рдХреЗ рдкрд╣рд▓реЗ рджреЛ рд╢реАрд░реНрд╖реЛрдВ рдХреЗ рдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред
рдкреБрдирд░рд╛рд╡рд░реНрддреА рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ (рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдХреНрд░рдорд╛рдВрдХрди) [ { "@Schema.Start": { "id": "5ec74f26-9515-4789-b852-12feeb258949", "name": "Start", "links": { "102c3dca-8e08-4389-bc7f-68862f2061ef": { "@Schema.Link": { "id": "102c3dca-8e08-4389-bc7f-68862f2061ef", "target": { "@Schema.Command|1": { "id": "447f6299-4bd4-48e4-b271-016a0d47fc0e", "name": "Command", "links": {}, "command": " A, B" } } } } } } }, { "@Schema.Command": 1 } ]
рдлреНрд▓реИрдЯ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ (рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддреГрдд) [ { "@Schema.Start": { "id": "1412603f-24c2-4513-836e-f2b0c0392483", "name": "Start", "links": { "b94ac7e5-d75f-44c1-960f-a02f52c994da": { "@Schema.Link": { "id": "b94ac7e5-d75f-44c1-960f-a02f52c994da", "target": { "@Schema.Command": 1 } } } } } }, { "@Schema.Command|1": { "id": "a93e452e-4276-4d6a-86a1-0681226d79f0", "name": "Command", "links": {}, "command": " A, B" } } ]
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рднреА рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЪреБрдирдирд╛, рдЖрдк рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрд╣ рд╕рдм рд▓рд┐рдВрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлреНрд▓реИрдЯ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдореЗрдВ, рджреВрд╕рд░реЗ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЗрд╕рдХреЗ рд╡рд┐рд╡рд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред
рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖
рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЛрдб рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИ (рд▓рдЧрднрдЧ 300 рд▓рд╛рдЗрдиреЗрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЖрдзреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╣реИрдВ)ред
- рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реИ рдФрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
- рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдХреНрд░рдорд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рд╣реИред
- рдкрд░рд┐рдгрд╛рдо рд╕реБрдЦрдж рдЖрдВрдЦ (IMHO) рдХреЛ рднрд╛рддрд╛ рд╣реИред
- рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ / рдбреЗрд╕рд┐рд░рд┐рд▓рд╛рдЗрдЬрд╝рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреАрда рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рд╡рд┐рдкрдХреНрд╖:
- рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рдХреНрд░рдордмрджреНрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИред
- рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдирд╛рдореЛрдВ рдкрд░ рдорд╛рдореВрд▓реА рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВред
- рд╕реАрд░рд┐рдпрд▓ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ noob рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдмрдЧ рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
- рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рд╕реЗ рдиреБрдХрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдЛрдг рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб ES6 рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдХреА рд╕рдВрдЧрддрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреАред
рдореЗрд░реЗ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд╢рди
- .NET рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдПрдХ рдлрдВрдХреНрд╢рди рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд╕рд╛рде
- рдореЙрдбрд▓-рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкрд╛рда рдЯреЗрдореНрдкрд▓реЗрдЯ рднрд░рдирд╛ред .NET рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрддрд┐рд╢реАрд▓ рдмрд╛рдЗрдЯрдХреЛрдб (рдЖрдИрдПрд▓) рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП