AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.03.2022, 18:12   #1  
Blog bot is offline
Blog bot
Участник
 
25,475 / 846 (79) +++++++
Регистрация: 28.10.2006
a33ik: D365FO JSON serialization and deserialization
Источник: http://daxonline.org/1749-d365fo-jso...alization.html
==============

Contract classes:

[DataContractAttribute('MainContract')]class VKMainContract{ protected str status; protected VKAdditionalContact additionalContract; protected List subList; [DataMemberAttribute("Status")] public str parmStatus(str _status = status) { status = _status; return status; } [DataMemberAttribute("AdditionalContract")] public VKAdditionalContact parmAdditionalContract(VKAdditionalContact _additionalContract = additionalContract) { additionalContract = _additionalContract; return additionalContract; } [DataMemberAttribute("ContractList"), DataCollectionAttribute(Types::Class, classStr(VKThirdContract))] public List parmSubList(List _subList = subList) { subList = _subList; return subList; }}[DataContractAttribute("AdditionalContact")]class VKAdditionalContact{ protected str field; [DataMemberAttribute("SomeAdditionalField")] public str parmSomeAdditionalField(str _field = field) { field = _field; return field; }}[DataContractAttribute('ThirdContract')]class VKThirdContract{ protected str field1; protected str field2; [DataMemberAttribute("SomeField1")] public str parmSomeField1(str _field = field1) { field1 = _field; return field1; } [DataMemberAttribute("SomeField2")] public str parmSomeField2(str _field = field2) { field2 = _field; return field2; }}
JSON example:
[ { "AdditionalContract":{ "SomeAdditionalField":"test1" }, "ContractList":[ { "SomeField1":"field1", "SomeField2":"field2" }, { "SomeField1":"field1", "SomeField2":"field2" } ], "Status":"status1" }, { "AdditionalContract":{ "SomeAdditionalField":"test2" }, "ContractList":[ { "SomeField1":"field1", "SomeField2":"field2" }, { "SomeField1":"field1", "SomeField2":"field2" } ], "Status":"status2" }]Runnable class to serialize contracts to JSON and then deserialize JSON back to same contracts:
class VKTest{ public static void main(Args _args) { VKAdditionalContact additionalContact = new VKAdditionalContact(); VKMainContract mainContract = new VKMainContract(); VKThirdContract thirdContract = new VKThirdContract(); List itemMainList = new List(Types::Class); List itemThirdList = new List(Types::Class); thirdContract.parmSomeField1('field1'); thirdContract.parmSomeField2('field2'); itemThirdList.addEnd(thirdContract); itemThirdList.addEnd(thirdContract); additionalContact.parmSomeAdditionalField('test1'); mainContract.parmAdditionalContract(additionalContact); mainContract.parmStatus('status1'); mainContract.parmSubList(itemThirdList); itemMainList.addEnd(mainContract); mainContract = new VKMainContract(); additionalContact = new VKAdditionalContact(); additionalContact.parmSomeAdditionalField('test2'); mainContract.parmStatus('status2'); mainContract.parmAdditionalContract(additionalContact); mainContract.parmSubList(itemThirdList); itemMainList.addEnd(mainContract); // case 1: json starts from array [] str json = FormJsonSerializer::serializeClass(itemMainList); // case 2: json starts from object {} //str json = FormJsonSerializer::serializeClass(mainContract); info(json); itemMainList = new List(Types::Class); itemThirdList = new List(Types::Class); mainContract = new VKMainContract(); additionalContact = new VKAdditionalContact(); thirdContract = new VKThirdContract(); ListEnumerator leSub; // case 1 itemMainList = FormJsonSerializer::deserializeCollection(classnum(List), json, Types::Class, identifierStr('VKMainContract')); ListEnumerator le = itemMainList.getEnumerator(); while (le.moveNext()) { mainContract = le.current(); additionalContact = mainContract.parmAdditionalContract(); itemThirdList = mainContract.parmSubList(); leSub = itemThirdList.getEnumerator(); while (leSub.moveNext()) { thirdContract = leSub.current(); } } // case 2 /*mainContract = FormJsonSerializer::deserializeObject(classNum(VKMainContract), json); additionalContact = mainContract.parmAdditionalContract(); itemThirdList = mainContract.parmSubList(); leSub = itemThirdList.getEnumerator(); while (leSub.moveNext()) { thirdContract = leSub.current(); }*/ // JSON does not have to completely match the contract. In that case only matching properties will be filled in. json = '{"SomeField1":"field1","SomeAdditionalField":"field2"}'; thirdContract = FormJsonSerializer::deserializeObject(classNum(VKThirdContract), json); info("done"); }}




Источник: http://daxonline.org/1749-d365fo-jso...alization.html
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Navigate Into Success: Passing JSON from JavaScript to C/AL–Part 2 Blog bot Dynamics CRM: Blogs 0 29.01.2015 15:13
PatrickChua: XML serialization Blog bot DAX Blogs 0 04.05.2009 14:05

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:13.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.