Skip to main content

Notifications

Finance | Project Operations, Human Resources, ...
Answered

Deserialize Json String into my contract class.

(0) ShareShare
ReportReport
Posted on by 123
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;    }}
 
  • Verified answer
    ShahzaibAhmed52 Profile Picture
    ShahzaibAhmed52 123 on at
    Deserialize Json String into my contract class.
    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;
        }
    
    }
     
  • Suggested answer
    Layan Jwei Profile Picture
    Layan Jwei 7,613 Super User 2025 Season 1 on at
    Deserialize Json String into my contract class.
    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
     

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

Quick Links

Announcing Our 2025 Season 1 Super Users!

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

Announcing Forum Attachment Improvements!

We're excited to announce that attachments for replies in forums and improved…

Vahid Ghafarpour – Community Spotlight

We are excited to recognize Vahid Ghafarpour as our February 2025 Community…

Leaderboard

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 291,965 Super User 2025 Season 1

#2
Martin Dráb Profile Picture

Martin Dráb 230,817 Most Valuable Professional

#3
nmaenpaa Profile Picture

nmaenpaa 101,156

Leaderboard

Product updates

Dynamics 365 release plans