JsonParserByLeo/Test/DomSer.mq5

87 lines
2.6 KiB
MQL5
Raw Permalink Normal View History

2026-07-23 16:16:14 -05:00
//+------------------------------------------------------------------+
//| 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\\JsonNode.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);
}
//+------------------------------------------------------------------+