| //+------------------------------------------------------------------+
|
| //| DomSer.mq5 |
|
| //| Copyright 2026, Niquel Mendoza |
|
| //| https://www.mql5.com |
|
| //+------------------------------------------------------------------+
|
| #property copyright "Copyright 2026, Niquel Mendoza"
|
| #property link "https://www.mql5.com"
|
| #property version "1.00"
|
| #property strict
|
|
|
| //+------------------------------------------------------------------+
|
| //| |
|
| //+------------------------------------------------------------------+
|
| #include "..\\Src\\Json.mqh"
|
|
|
| //+------------------------------------------------------------------+
|
| //| |
|
| //+------------------------------------------------------------------+
|
| struct Libro
|
| {
|
| string name;
|
| string titulo;
|
| double valor;
|
|
|
|
|
| //---
|
| Libro() {}
|
| Libro(TSN::CDomNodeBase& obj)
|
| {
|
| name = obj["name"].ToString();
|
| titulo = obj["titulo"].ToString();
|
| valor = obj["valor"].ToDouble(0.00);
|
| }
|
| static void ToTsnDomNode(TSN::CDomNodeBase& obj, const Libro& other)
|
| {
|
| obj.NewObj(16);
|
| obj["name"] = other.name;
|
| obj["titulo"] = other.titulo;
|
| obj["valor"] = other.valor;
|
| }
|
| };
|
|
|
| //+------------------------------------------------------------------+
|
| //| Script program start function |
|
| //+------------------------------------------------------------------+
|
| void OnStart()
|
| {
|
| //---
|
| TSN::CDomNodeManager manager;
|
| Libro l;
|
| l.name = "hola";
|
| l.titulo = "titulo";
|
| l.valor = 1.0;
|
|
|
| // Load
|
| TSN::CJsonDomSerializer ser;
|
| TSN::CDomNodeBase node(&manager);
|
| node.Load<Libro>(l);
|
| Print(ser.Serialize(&node));
|
| Print(CharArrayToString(ser.m_buf, 0, ser.m_buf_s));
|
|
|
| //---
|
| TSN::CJsonBuilder builder;
|
| builder.Obj();
|
| builder.KeyWV("name").ValSWV("hola");
|
| builder.KeyWV("titulo").ValSWV("como");
|
| builder.KeyWV("valor").Val(10.0490);
|
| builder.EndObj();
|
|
|
| //---
|
| TSN::CJsonParser parser;
|
| ArrayCopy(parser.m_raw, builder.m_buf, 0, 0, builder.m_pos);
|
| parser.CalcLen();
|
| parser.CorrectPadding();
|
| parser.Parse();
|
|
|
| // Dom building
|
| TSN::CDomNodeBase node2(&manager); // le pasamos su manager
|
| parser.GetRoot().ToDom(&node2, &manager);
|
|
|
| //---
|
| Libro l2 = node2.GetAs<Libro>();
|
| Print(l2.name);
|
| Print(l2.titulo);
|
| Print(l2.valor);
|
| }
|
| //+------------------------------------------------------------------+
|