MQL5의 OOP에 대한 질문 - 페이지 63

 
Igor Makanu :

KB에 넣어

IMHO, 필요한 것!

json은 잘 정립된 형식이며 C# 및 MQL에서 100% 일대일 클래스를 가질 수 있고 런타임에 모델 로드를 구성할 수 있어 편리합니다. 지금은 이 방향으로 연결합니다.

하지만 여기 저기 바이너리 데이터를 구동하려면 .... 글쎄, 그것은 더 이상 참신하지 않고 게으른 사람들 만이 할 수없는 것 같습니다))))


추신: Python은 json에서도 문제 없이 작동하는 것 같습니다. Metaquotes가 pythonists에게 새로운 MT5 기능을 제공한 것이 확실하지 않습니다. 어리석게도 과거 데이터를 펌핑합니까? - 의미? 문제가 아니었어

게으름. 거기에서 몇 시간 동안 "파일"로 잘라야하지만 나에게는 아직 (json) 및 nafik이 떨어지지 않았습니다.

 

씨#

 namespace ConsoleApp4
{

     public class Rootobject
    {
         public Test test { get ; set ; }
         public int a { get ; set ; }
         public long b { get ; set ; }
    }

     public class Test
    {
         public int a { get ; set ; }
         public float b { get ; set ; }
         public string t { get ; set ; }
    }


     class Program
    {
         static void Main( string [] args)
        {
             var obj = new Rootobject { a = 555 , b = long .MinValue, test = new Test { a = 10 , b = 0.369 F, t = "Hi" } };
             string json = JsonSerializer.Serialize<Rootobject>(obj);
            Console.WriteLine(json);
            Console.ReadLine();
        }
    }
}

결과:

씨#

{"테스트":{"a":10,"b":0.368999988,"t":"안녕"},"a":555,"b":-9223372036854775808}

MQL:

{"테스트":{"a":10,"b":0.369,"t":"안녕"},"a":555,"b":-9223372036854775808}


확실히 마법사!

;)

 

내 위시리스트가 이미 지겹다고 생각하지만 객체 배열이 필요합니다.

나 자신, 나는 할 수 없다

다음과 같은 예가 필요합니다.

 class CJSon{
   string text;
public :
   CJSon():text(NULL){}
   CJSon* Push( string key, string value ) {text+=COMMA+ "\"" +key+ "\":\"" + value + "\"" ; return & this ;}
   CJSon* PushStruct( string key, string value ) {text+=COMMA+ "\"" +key+ "\":" + value ; return & this ;}
   CJSon* Push( string key, long value )   {text+=COMMA+ "\"" +key+ "\":" +( string ) value ; return & this ;}
   CJSon* Push( string key, double value ) {text+=COMMA+ "\"" +key+ "\":" +( string ) value ; return & this ;}
   string Finish()   { return text+= "}" ;}
};
#undef COMMA

class _CTest{
public :
   int a;
   double b;
   string t;
   _CTest( int _a, double _b, string _t):a(_a),b(_b),t(_t){}
   string JSon()  { return (CJSon()).VALUE(a).VALUE(b).VALUE(t).Finish();}
};

class CTest{
   _CTest test[ 5 ];
public :
   int a;
   long b;
public :
   CTest():a( 555 ),b(LONG_MIN)
   { 
       for ( int i=ArraySize(test)-1; i>= 0 ; i--) 
         {
            test[i].a = i;
            test[i].b = ( double )i/ 10.0 ;
            test[i].t = ( string )(i* 2 ); 
         }
   }
   string JSon() { return (CJSon()).STRUCT(test).VALUE(a).VALUE(b).Finish();}
};

결과는 다음과 같아야 합니다.

{"테스트":[{"a":4,"b":0.4,"t":"8"},{"a":3,"b":0.3,"t":"6"}, {"a":2,"b":0.2,"t":"4"},{"a":1,"b":0.1,"t":"2"},{"a":0 ,"b":0.0,"t":"0"}],"a":555,"b":-9223372036854775808}

 
Igor Makanu :

내 위시리스트가 이미 지겹다고 생각하지만 객체 배열이 필요합니다.
나 자신, 나는 할 수 없다

말해주세요, 제가 어딘가에서 놓쳤을 수도 있지만, 그래도,
json의 직렬화/역직렬화를 위한 기성품 솔루션과 정확히 맞지 않는 것은 무엇입니까?

JSON Serialization and Deserialization (native MQL)
JSON Serialization and Deserialization (native MQL)
  • www.mql5.com
Сериализация и десериализация JSON-протокола. Портированный код со скоростной библиотеки С++. Практичный пример: авторизация на сайте и парсинг ответа Благодарности принимаются в виде примеров, кто как применяет MQL для работы с веб-ресурсами. Поделитесь своим опытом работы с JSON в MQL. В протокол добавлены функции Escape / Unescape...
 
Sergey Dzyublik :

말해주세요, 제가 어딘가에서 놓쳤을 수도 있지만, 그래도,
json의 직렬화/역직렬화를 위한 기성품 솔루션과 정확히 맞지 않는 것은 무엇입니까?

KB에서 솔루션은 json에서 개체 필드의 독립적인 형성을 의미합니다.

@Vladimir Simakov 가 제안한 솔루션에서 더 편리하게 수행됩니다.

 
Igor Makanu :

KB에서 솔루션은 json에서 개체 필드의 독립적인 형성을 의미합니다.
@Vladimir Simakov 가 제안한 솔루션에서 더 편리하게 수행됩니다.

당신은 "자기 형성"이라는 용어에 대해 매우 구체적으로 이해하고 있습니다.

 class _CTest{
public :
   int a;
   double b;
   string t;
   _CTest( int _a, double _b, string _t):a(_a),b(_b),t(_t){}
   string JSon()  { return (CJSon()).VALUE(a).VALUE(b).VALUE(t).Finish();}
};

분명히 당신의 작업이 당신을 위해 해결되었고 당신이 그것을 맛볼 수 있기 때문에 솔루션이 더 편리합니다 ...

 
Sergey Dzyublik :

당신은 "자기 형성"이라는 용어에 대해 매우 구체적으로 이해하고 있습니다.

분명히 당신의 작업이 당신을 위해 해결되었고 당신이 그것을 맛볼 수 있기 때문에 솔루션이 더 편리합니다 ...

무엇이 당신을 이끌었는지 추측하기 어렵습니다. 도움을 주고 싶었습니다 - 도움이 되었고, 원하지 않았습니다 - 주제를 닫고 그의 사업에 대해 이야기했습니다.

그리고 다시 한 번 포럼 참가자들의 개인적인 특성에 대해 논의하려고 .... 일반적으로 "결혼해야 합니다, 선생님!" (c) - 할 일이 없을 때 머리를 굴릴 사람이 있을 것입니다.


주제별:

대괄호를 삽입할 위치를 선택하면 결과가 참담합니다.

#define ARRCOMMA (arrtext==NULL? "[" : "," )
...
CJSon* PushArray( string key, string value ) {text+= COMMA + "\"" +key+ "\":" + ARRCOMMA + value ;   return & this ;}

선택하는 것이 지겹다면 더 더러운 트릭으로 []를 삽입하겠습니다.)))

 
Igor Makanu :

무엇이 당신을 이끌었는지 추측하기 어렵습니다. 도와주고 싶었습니다 - 도움이 되었고, 원하지 않았습니다 - 주제를 닫고 그의 사업에 대해 이야기했습니다

그리고 다시 한 번 포럼 참가자들의 개인적인 특성에 대해 논의하려고 .... 일반적으로 "결혼해야 합니다, 선생님!" (c) - 할 일이 없을 때 머리를 굴릴 사람이 있을 것입니다.


주제별:

대괄호를 삽입할 위치를 선택하면 결과가 참담합니다.

선택하는 것이 지겹다면 더 더러운 트릭으로 []를 삽입하겠습니다.)))

 #define COMMA (text== NULL ? "{" : "," )
#define VALUE(dVal) Value( #dVal,dVal)
#define STRUCT(dVal) Struct( #dVal,dVal)
#define STRUCT_PTR(dVal) StructPtr( #dVal,dVal)
#define ARRAY(dVal) Array( #dVal,dVal)
#define ARRAY_STRUCT(dVal) ArrayStruct( #dVal,dVal)
#define ARRAY_STRUCT_PTR(dVal) ArrayStructPtr( #dVal,dVal)

class CJSon{
   string text;
public :
   CJSon():text( NULL ){}
   CJSon* Manual( string key, string _text) {text+=COMMA+ "\"" +key+ "\":" +_text; return & this ;}
   template < typename T>
   CJSon* Value( string key,T value) {text+=COMMA+ "\"" +key+ "\":" +_Text(value); return & this ;}
   template < typename T>
   CJSon* Struct( string key,T &value) {text+=COMMA+ "\"" +key+ "\":" +value.JSon(); return & this ;}
   template < typename T>
   CJSon* StructPtr( string key,T* value) {text+=COMMA+ "\"" +key+ "\":" +(! CheckPointer (value)? "null" :value.JSon()); return & this ;}
   template < typename T>
   CJSon* Array( string key,T &value[]){
      text+=COMMA+ "\"" +key+ "\":[" ;
       for ( int i= 0 ,count= ArraySize (value);i<count;text+=_Text(value[i++])+ "," );
       StringSetCharacter (text, StringLen (text)- 1 , ']' );
       return & this ;}
   template < typename T>
   CJSon* ArrayStruct( string key,T &value[]){
      text+=COMMA+ "\"" +key+ "\":[" ;
       for ( int i= 0 ,count= ArraySize (value);i<count;text+=value[i++].JSon()+ "," );
       StringSetCharacter (text, StringLen (text)- 1 , ']' );
       return & this ;}
   template < typename T>
   CJSon* ArrayStructPtr( string key,T &value[]){
      text+=COMMA+ "\"" +key+ "\":[" ;
       for ( int i= 0 ,count= ArraySize (value);i<count;++i) text+=( CheckPointer (value[i])== POINTER_INVALID ? "null" :value[i].JSon())+ "," );
       StringSetCharacter (text, StringLen (text)- 1 , ']' );
       return & this ;}
   string Finish()   { return text+= "}" ;}
private :
   string _Text( string value) { return "\"" +value+ "\"" ;}
   template < typename T>
   string _Text(T value) { return ( string )value;}
};

#undef COMMA

직렬화 가능한 객체에 대한 포인터 처리를 동시에 수정하고 추가했습니다.

추신. "코드 베이스"에 넣어야 할 것 같습니다))))

 
Vladimir Simakov :
 class CTest{
   _CTest test[ 5 ];
public :
   int a;
   long b;
public :
   CTest():a( 555 ),b( LONG_MIN )
   {
       for ( int i= ArraySize (test)- 1 ; i>= 0 ; i--) 
         {
            test[i].a = i;
            test[i].b = ( double )i/ 10.0 ;
            test[i].t = ( string )(i* 2 ); 
         }
      
   }
   
   string JSon() { return (CJSon()).ARRAY_STRUCT(test).VALUE(a).VALUE(b).Finish();}
};

void OnStart (){
   CTest test;
   Print (test.JSon());
 }

다음과 같이 필요합니다(줄 바꿈이 필요하지 않습니다. 수동으로 추가했습니다).

{ "test" :[
         { "a" : 0 , "b" : 0.0 , "t" : "0" },
         { "a" : 1 , "b" : 0.1 , "t" : "2" },
         { "a" : 2 , "b" : 0.2 , "t" : "4" },
         { "a" : 3 , "b" : 0.3 , "t" : "6" },
         { "a" : 4 , "b" : 0.4 , "t" : "8" }],
         "a" : 555 , "b" :- 9223372036854775808 }

이제 다음과 같이:

{ "test" :[
         " {" a ":0," b ":0.0," t ":" 0 "} " ,
         " {" a ":1," b ":0.1," t ":" 2 "} " ,
         " {" a ":2," b ":0.2," t ":" 4 "} " ,
         " {" a ":3," b ":0.3," t ":" 6 "} " ,
         " {" a ":4," b ":0.4," t ":" 8 "} " ],
         "a" : 555 , "b" :- 9223372036854775808 }
 
Vladimir Simakov :

추신. 이것은 "코드베이스"에 배치되어야 할 것 같습니다))))

IMHO, 잘했습니다. 물론 질문이 있습니다. 얼마나 빨리 했는지 .... 이 시간 동안 .... 음, 말하자면, 무엇보다도 감정!

수정된 버전을 확인했습니다. - OK, 모든 것이 올바르게 작동합니다.