Deserialization of Json Array in D365 Finance and operations

Deserialization of Json Array in D365 Finance and operations

Deserialization is the reverse process of serialization. It involves converting a JSON-formatted string back into a usable data structure within D365 FO. This is crucial when you receive data from external sources in JSON format and need to process it within your ERP system.

In this article we are going to discuss Deserialization of JSON Array in D365 Finance and operation .In our case JSON Array contains nested objects further and then its values .

Here is Tabular form of our JSON

www.Json2Table.com

Example Json:

{
  "data": [
    {
      "orderNumber": "PO-001",
      "vendor": "ABC Supplier",
      "items": [
        {
          "itemCode": "A001",
          "itemName": "Widget",
          "quantity": 10
        },
        {
          "itemCode": "A002",
          "itemName": "Gadget",
          "quantity": 5
        }
      ]
    },
    {
      "orderNumber": "PO-002",
      "vendor": "XYZ Supplies",
      "items": [
        {
          "itemCode": "B001",
          "itemName": "Tool Set",
          "quantity": 2
        },
        {
          "itemCode": "B002",
          "itemName": "Paint",
          "quantity": 20
        }
      ]
    },
    {
      "orderNumber": "PO-003",
      "vendor": "123 Inc.",
      "items": [
        {
          "itemCode": "C001",
          "itemName": "Office Chair",
          "quantity": 4
        },
        {
          "itemCode": "C002",
          "itemName": "Desk Lamp",
          "quantity": 8
        }
      ]
    },
    {
      "orderNumber": "PO-004",
      "vendor": "Best Electronics",
      "items": [
        {
          "itemCode": "D001",
          "itemName": "Laptop",
          "quantity": 3
        },
        {
          "itemCode": "D002",
          "itemName": "Mouse",
          "quantity": 10
        }
      ]
    },
    {
      "orderNumber": "PO-005",
      "vendor": "Furniture World",
      "items": [
        {
          "itemCode": "E001",
          "itemName": "Sofa",
          "quantity": 1
        },
        {
          "itemCode": "E002",
          "itemName": "Coffee Table",
          "quantity": 2
        }
      ]
    }
  ]
}        

Note: For storing Json in variable we can convert json Array into Json string using this Link

https://jsontostring.com/

Lets Code in Visual studio

We need three classes

  • DataClassDataContract
  • ?ItemsDataContract
  • DeSerialization

(1) DataClassDataContract

This Contract class represents the root node of the JSON data structure, which contains an array of items, with the 'Item' attribute being of type 'List'.

[DataContractAttribute('data')]
class DataClassDataContract
{
   str                    orderNumber;
   str                    vendor;
   private List           itemsDataContractArr;
 
   [DataMemberAttribute("orderNumber")]
   public str parmOrderNumber(str _orderNumber = orderNumber)
   {
       orderNumber = _orderNumber;
       return orderNumber;
   }
 
   [DataMemberAttribute("vendor")]
   public str parmVendor(str _vendor = vendor)
   {
       vendor = _vendor;
       return vendor;
   }
 
   [DataMember("items"),
   DataCollection(Types::Class, classStr(ItemsDataContract))
   ]
   public List paramItems(List _itemsDataContractArr = itemsDataContractArr)
   {
       itemsDataContractArr = _itemsDataContractArr;
       return itemsDataContractArr;
   }
 
}
        

(2) ItemsDataContract

This Contract class for the List of Items

[DataContractAttribute]
class ItemsDataContract
{
   str         itemCode;
   str         itemName;
   str         quantity;
 
   [DataMember("itemCode")]
   public str paramItemCode(str _itemCode = itemCode)
   {
       itemCode = _itemCode;
       return itemCode;
   }
 
   [DataMember("itemName")]
   public str paramItemName(str _itemName = itemName)
   {
       itemName = _itemName;
       return itemName;
   }
 
   [DataMember("quantity")]
   public str paramItemQty(str _quantity = quantity)
   {
       quantity = _quantity;
       return quantity;
   }
 
}
        

(3) DeSerialization

This class is our main class where Json string is stored in variable and converting into contract objects using FormJsonSerializer::deserializeCollection() method.

Note:

For Json Array [....]: FormJsonSerializer::deserializeCollection( )

For Json Object {....}: FormJsonSerializer::deserializeObject( )

class DeSerilization
{
  
   public static void main(Args _args)
   {
       List                    dataMainList = new List(Types::Class);
       List                    itemMainList = new List(Types::Class);
       DataClassDataContract   dataClassContract = new DataClassDataContract();
       ItemsDataContract       itemsDataContract = new ItemsDataContract();
       ListEnumerator          leSub, leItems;
       
       str jsonString = "{\"data\":[{\"orderNumber\":\"PO-001\",\"vendor\":\"ABCSupplier\",\"items\":[{\"itemCode\":\"A001\",\"itemName\":\"Widget\",\"quantity\":10},{\"itemCode\":\"A002\",\"itemName\":\"Gadget\",\"quantity\":5}]},{\"orderNumber\":\"PO-002\",\"vendor\":\"XYZSupplies\",\"items\":[{\"itemCode\":\"B001\",\"itemName\":\"ToolSet\",\"quantity\":2},{\"itemCode\":\"B002\",\"itemName\":\"Paint\",\"quantity\":20}]},{\"orderNumber\":\"PO-003\",\"vendor\":\"123Inc.\",\"items\":[{\"itemCode\":\"C001\",\"itemName\":\"OfficeChair\",\"quantity\":4},{\"itemCode\":\"C002\",\"itemName\":\"DeskLamp\",\"quantity\":8}]},{\"orderNumber\":\"PO-004\",\"vendor\":\"BestElectronics\",\"items\":[{\"itemCode\":\"D001\",\"itemName\":\"Laptop\",\"quantity\":3},{\"itemCode\":\"D002\",\"itemName\":\"Mouse\",\"quantity\":10}]},{\"orderNumber\":\"PO-005\",\"vendor\":\"FurnitureWorld\",\"items\":[{\"itemCode\":\"E001\",\"itemName\":\"Sofa\",\"quantity\":1},{\"itemCode\":\"E002\",\"itemName\":\"CoffeeTable\",\"quantity\":2}]}]}";
       dataMainList = FormJsonSerializer::deserializeCollection(classnum(List), jsonString, Types::Class, identifierStr('DataClassDataContract'));
       ListEnumerator     le = dataMainList.getEnumerator();
       while (le.moveNext())
       {
           dataClassContract    = le.current();
           
           Info(strFmt("PONumber:%1 - Vendor:%2 ",dataClassContract.parmOrderNumber(),dataClassContract.parmVendor()));
           itemMainList        = dataClassContract.paramItems();
           leItems             = itemMainList.getEnumerator();
           while (leItems.moveNext())
           {
               itemsDataContract = leItems.current();
               Info(strFmt("ItemCode:%1 - ItemName:%2 - ItemQuantity:%3",itemsDataContract.paramItemCode(),itemsDataContract.paramItemName(),itemsDataContract.paramItemQty()));
           }
           
       }
      
   }
 
}
        
Output of the Code

Thank you.

Let's connect and grow together.

要查看或添加评论,请登录

Wajahat Wasti的更多文章

社区洞察

其他会员也浏览了