Конвертация JS COM обьекта в С#

153
31 марта 2018, 13:17

Как можно обьект из JavaScript преобразовать в похожий на С#? Как сделать EnumerateProperties для COM?

Например такой обьект {id:1, b:"20", c :{z:1}}?

Т.е хочу DeserializeBig("{id:1, b:"20", c :{z:1}}")... получилось, но не хватает одной детали...

Dictionary<string, object> io_data; 
Type TScriptControl;
Dictionary<string, object> DeserializeBig(string query) {   // Отправил обьект
    Dictionary<string, object> ret = new Dictionary<string, object>();
    TScriptControl = Type.GetTypeFromProgID("ScriptControl");
    object sc = TScriptControl.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, null);
    TScriptControl.InvokeMember("Language", System.Reflection.BindingFlags.SetProperty, null, sc, new object[] { "JavaScript" });
    TScriptControl.InvokeMember("AddCode", System.Reflection.BindingFlags.InvokeMethod, null, sc, new object[] { "var x=" + query + ";" });
    json = TScriptControl.InvokeMember("Eval", System.Reflection.BindingFlags.InvokeMethod, null, sc, new object[] { "x" });
    io_data = ret;
    QueryKeyHlp("action");
    QueryKeyHlp("id");               
    return ret;
   }

void QueryKeyHlp(string id) { // узнаю есть ли у обьекта свойство.
    if (io_data.ContainsKey(id)) return;        
    try {
    object q=TScriptControl.InvokeMember(id,System.Reflection.BindingFlags.GetProperty,null,json, null);
      if (q == null) return;
      if ((q is string)|| (q.GetType().IsPrimitive)) { 
          io_data.Add(id, q);
          return;
         }

Что б узнать обладает ли обьект свойством 'а' нужно вызвать QueryKeyHlp, т.е. фактически выполнить GetProperty. Как сделать EnumerateProperties для COM?

Мне понадобилось разпарсить крупный > 4Мб JSon. Стандартная JavaScriptSerializer - не ест. Ньютон не прошу (знаю что есть ньютон и мого разных других решений). Мне не хватает чуть-чуть что б преобразовать обьект. Сейчас я просто каждое свойство запрашиваю по- отдельности.

READ ALSO
Как пометить/снять все флажки в списке?

Как пометить/снять все флажки в списке?

Есть список с CheckBox'ами, как по нажатию по кнопке пометить/снять пометку всех CheckBox'ов?

238
Javascript new Regexp не находит совпадение

Javascript new Regexp не находит совпадение

Здравствуйте, допустим есть текст:

260
Проверка, есть ли бронирование

Проверка, есть ли бронирование

ЗдравствуйтеПишу приложение на nwjs для администрирования гостиницы

199