Как можно обьект из 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 - не ест. Ньютон не прошу (знаю что есть ньютон и мого разных других решений). Мне не хватает чуть-чуть что б преобразовать обьект. Сейчас я просто каждое свойство запрашиваю по- отдельности.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей