Skip to main content

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id :
Finance | Project Operations, Human Resources, ...
Answered

Deserialize Json String into my contract class.

(0) ShareShare
ReportReport
Posted on by 108
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
    108 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
    4,102 Moderator 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

Dynamics 365 Community Update – Sep 16th

Welcome to the next edition of the Community Platform Update. This is a weekly…

Announcing Our 2024 Season 2 Super Users!

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

Dynamics 365 Community Newsletter - September 2024

Check out the latest community news

Leaderboard

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 283,860 Test role Public

#2
Ludwig Reinhard Profile Picture

Ludwig Reinhard 229,831 Microsoft Employee

#3
Martin Dráb Profile Picture

Martin Dráb 225,155 Moderator

Overall leaderboard

Product updates

Dynamics 365 release plans