2012-03-23 3 views
3

У меня есть строка JSON, у которой есть вложенные объекты с динамическими именами, которые меняются каждый раз. Для примера:APEX JSON Deserialize

{ 
    "Objects": { 
     "dynamicName1": { 
      "name": "test" 
     }, 
     "dynamicName2": { 
      "name": "test" 
     } 
    } 
} 

мне было интересно, как вы можете десериализации эту строку в APEX с помощью классов-оболочек?

Я попытался это:

public class masterobj 
{ public childobj Objects;  
} 

public class childobj 
{ public el dynamicName1; 
    public el dynamicName2;  
} 

public class el 
{ public string name; 
} 

String s = '{"Objects":{"dynamicName1":{"name":"test"},"dynamicName2":{"name":"test"}}}'; 
masterobj mo = (masterobj)JSON.deserialize(s, masterobj.class); 

, который хорошо работает, когда вы объявили динамические имена переменных в классе для каждого вложенного объекта.

Проблема и вопрос в том, как я могу сделать эту работу с использованием динамической переменной в классе-оболочке. Поскольку имена объектов будут различаться, а также количество объектов, я не могу жестко закодировать имена, поскольку они различны каждый раз.

Любые идеи?

ответ

3

Вы не сможете десериализовать структуру, подобную структуре с функциями привязки данных анализатора json, вам нужно использовать streaming json parser для ее чтения.

+4

Почему всегда должен быть трудный путь с Salesforce? :) –

+0

FWIW, есть некоторые изменения в работах, чтобы сделать это проще. – superfell

+0

@superfell Ваша ссылка неверна –

0

Используйте карту:

public class masterobj 
{ 
    Map<String, el> Objects; 
}