web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

Community site session details

Community site session details

Session Id :
Small | Business Central, NAV, RMS
Answered

Deserialize Json String into my contract class.

(0) ShareShare
ReportReport
Posted on by
Hi, 
 
I am Desearlizing the response JSON from the API call but I get an empty contract class. below is the code that I am using to do so.
 
System.IO.StreamReader streamRead = new System.IO.StreamReader(exWeb.Response.GetResponseStream());str responseStr = streamRead.ReadToEnd();MyContract resultTopResponse = FormJsonSerializer::deserializeObject(classNum(MyContract), responseStr);
 
MyContract class contains four strings and one list. 
 
Here is the sample Response JSON.
 
{    /validationResults/: {        /infoMessages/: [],        /warningMessages/: [{                /type/: /WARNING/,                /code/: /BR-10/,                /category/: /EN_16931/,                /message/: /An Invoice shall contain the Buyer postal address (BG-8).Not applicable for simplified tax invoices and associated credit notes and debit notes (KSA-2, position 1 and 2 = 02)./,                /status/: /WARNING/            }, {                /type/: /WARNING/,                /code/: /BR-KSA-37/,                /category/: /KSA/,                /message/: /The seller address building number must contain 4 digits./,                /status/: /WARNING/            }, {                /type/: /WARNING/,                /code/: /BR-KSA-66/,                /category/: /KSA/,                /message/: /Seller postal code (BT-38) must be 5 digits./,                /status/: /WARNING/            }        ],        /errorMessages/: [{                /type/: /ERROR/,                /code/: /XSD_ZATCA_INVALID/,                /category/: /XSD validation/,                /message/: /Schema validation failed; XML does not comply with UBL 2.1 standards in line with ZATCA specifications/,                /status/: /ERROR/            }, {                /type/: /ERROR/,                /code/: /BR-16/,                /category/: /EN_16931/,                /message/: /An Invoice shall have at least one Invoice line (BG-25)/,                /status/: /ERROR/            }        ],        /status/: /ERROR/    },    /reportingStatus/: null,    /clearanceStatus/: /NOT_CLEARED/,    /qrSellertStatus/: null,    /qrBuyertStatus/: null}
 
Here is the code in MyContract Class:
[DataContractAttribute]class MyContract{    str reportingStatus, clearanceStatus, qrSellertStatus, qrBuyertStatus;    list  validationResults;    [DataMemberAttribute(/reportingStatus/)]    public str parmReportingStatus(str _reportingStatus = reportingStatus)    {        reportingStatus = _reportingStatus;        return reportingStatus;    }    [DataMemberAttribute(/clearanceStatus/)]    public str parmClearanceStatus(str _clearanceStatus = clearanceStatus)    {        clearanceStatus = _clearanceStatus;        return clearanceStatus;    }    [DataMemberAttribute(/qrSellertStatus/)]    public str parmQrSellertStatus(str _qrSellertStatus = qrSellertStatus)    {        qrSellertStatus = _qrSellertStatus;        return qrSellertStatus;    }    [DataMemberAttribute(/qrBuyertStatus/)]    public str parmQrBuyertStatus(str _qrBuyertStatus = qrBuyertStatus)    {        qrBuyertStatus = _qrBuyertStatus;        return qrBuyertStatus;    }    [DataMemberAttribute(/validationResults/), DataCollection(Types::Class, classStr(MyContract2))]    public list parmValidationResults(list _validationResults = validationResults)    {        validationResults = _validationResults;        return validationResults;    }}
 
I have the same question (0)
  • Suggested answer
    Layan Jwei Profile Picture
    Super User 2025 Season 2 on at
    Hi Shahzib,

    What is exWeb.Response? you didn't show us full code
    and what is rac resultTopResponse? why you didn't replace it with your contract?

    it should be sth like this:
    str response;
    System.Net.HttpWebResponse hhtpResponse= request.GetResponse(); //assume request is defined (System.Net.WebRequest), maybe this is your exWeb.Response
     
    using (System.IO.StreamReader streamReader  = new System.IO.StreamReader(hhtpResponse.GetResponseStream()))
    {
       response = streamReader.ReadToEnd();
    }
    
    MyContract myContract= new MyContract();
    myContract = FormJsonSerializer::deserializeObject(classNum(MyContract),  response) as MyContract;

    Thanks,
    Layan Jweihan
    Please mark this answer as "Verified" if it solved your issue. In order to help others who will face a similar issue in the future
     
  • Verified answer
    ShahzaibAhmed52 Profile Picture
    on at
    In my case, It worked as I made the following changes in mycontract class.
     
    I changed 'validationResults' to Mycontract2 from a list. As my in my JSON 'validationResults' was not an array.
     
    [DataContractAttribute]
    class MyContract
    {
        str reportingStatus, clearanceStatus, qrSellertStatus, qrBuyertStatus;
    
        MyContract2 validationResults;
    
        [DataMemberAttribute("reportingStatus")]
        public str parmReportingStatus(str _reportingStatus = reportingStatus)
        {
            reportingStatus = _reportingStatus;
            return reportingStatus;
        }
    
        [DataMemberAttribute("clearanceStatus")]
        public str parmClearanceStatus(str _clearanceStatus = clearanceStatus)
        {
            clearanceStatus = _clearanceStatus;
            return clearanceStatus;
        }
    
        [DataMemberAttribute("qrSellertStatus")]
        public str parmQrSellertStatus(str _qrSellertStatus = qrSellertStatus)
        {
            qrSellertStatus = _qrSellertStatus;
            return qrSellertStatus;
        }
    
        [DataMemberAttribute("qrBuyertStatus")]
        public str parmQrBuyertStatus(str _qrBuyertStatus = qrBuyertStatus)
        {
            qrBuyertStatus = _qrBuyertStatus;
            return qrBuyertStatus;
        }
    
        [DataMemberAttribute("validationResults"), DataCollectionAttribute(Types::Class, classStr(MyContract2))]
        public MyContract2 parmValidationResults(MyContract2_validationResults = validationResults)
        {
            validationResults = _validationResults;
            return validationResults;
        }
    
    }
     

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

News and Announcements

Smoke Test on 12-Jan-26

Quick Links

Mansi Soni – Community Spotlight

We are honored to recognize Mansi Soni as our August 2025 Community…

Announcing our 2025 Season 2 Super Users!

A new season of Super Users has arrived, and we are so grateful for…

Congratulations to the July Top 10 Community Leaders!

These are the community rock stars!

Leaderboard > Small | Business Central, NAV, RMS

Last 30 days Overall leaderboard

Product updates

Dynamics 365 release plans