web
You’re offline. This is a read only version of the page.
close
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

read data from Json - string

(0) ShareShare
ReportReport
Posted on by 122

HI Every one,

i was trying to read Json message and i could able to read header but not the inner node (Lines) in List details
any suggestion or any existing classes which we have for sub noted in system.

str json;
List values = new List(Types::Class);
ListEnumerator value;
json = '[{"FieldValues": [{"parmFirst": "ValueFirst", "parmSecond": "ValueSecond", "Lines":[{"parmFirst": "ValueFirst", "parmSecond": "ValueSecond"}] }]}]';

values = FormJsonSerializer::deserializeCollection(classnum(List), json, Types::Class, classStr(JSONContract));
value = values.getEnumerator();
while(value.moveNext())
{
JSONContract JSONContractCurrent = value.current();
info(strfmt('%1',JSONContractCurrent.parmFirst(), JSONContractCurrent.parmSecond()));-- Values are getting

info(strfmt('%1',JSONContractCurrent.parmLinesDetail())) -- empty List
}

Thanks in Advance.

I have the same question (0)
  • Suggested answer
    ergun sahin Profile Picture
    8,826 Moderator on at

    You can use RetailCommonWebAPI or (dataContract)

    community.dynamics.com/.../563100

    dev.goshoom.net/.../

  • Martin Dráb Profile Picture
    237,892 Most Valuable Professional on at

    Please always post your code with line indentation - it makes code much easier to read. Use Insert > Insert Code to achieve that.

    You have this JSON:

    [
    	{
    		"FieldValues":
    		[
    			{
    				"parmFirst": "ValueFirst",
    				"parmSecond": "ValueSecond",
    				"Lines":
    				[
    					{
    						"parmFirst": "ValueFirst",
    						"parmSecond": "ValueSecond"
    					}
    				]
    			}
    		]
    	}
    ]

    and you're trying to deserialize it as a list of instances of JSONContract class. Could you show us your definition of this class, please?

  • SarathVarma Profile Picture
    122 on at

    i have used contract class as below

    [DataContract]

    class JSONContract

    {

       String50 parmFirst, parmSecond;

       List lines = new  List (types::Class);

     

      [DataMemberAttribute('parmFirst')]

       public String50 parmFirst(String50 _parmFirst = parmFirst)

       {

           parmFirst = _parmFirst;

           return parmFirst;

       }

       

       [DataMemberAttribute('parmSecond')]

       public String50 parmSecond(String50 _parmSecond = parmSecond)

       {

           parmSecond = _parmSecond;

           return parmSecond;

       }

    [DataMemberAttribute('lines')],

    aifcollectiontypeattribute('lines', types::class, classstr(JSONLineContract)),

    aifcollectiontypeattribute('return', types::class, classstr(JSONLineContract))]

    public List parmLines(List _lines = lines)

    {

    lines = _lines;

    return lines;

    }

    }

    Iam getting 1st and 2nd  param method values but not getting for line details

  • Martin Dráb Profile Picture
    237,892 Most Valuable Professional on at

    Please start following my advice and use Insert > Insert Code (in the rich-formatting view) to paste source code. Let me format your code correctly and re-post it in the right way, but please do it by yourself next time.

    [DataContract]
    class JSONContract
    {
    	String50 parmFirst, parmSecond;
    	List lines = new List(Types::Class);
    
    	[DataMemberAttribute('parmFirst')]
    	public String50 parmFirst(String50 _parmFirst = parmFirst)
    	{
    	   parmFirst = _parmFirst;
    	   return parmFirst;
    	}
    
    	[DataMemberAttribute('parmSecond')]
    	public String50 parmSecond(String50 _parmSecond = parmSecond)
    	{
    	   parmSecond = _parmSecond;
    	   return parmSecond;
    	}
    
    	[
    		DataMemberAttribute('lines'),
    		AifCollectionTypeAttribute('lines', Types::Class, classStr(JSONLineContract)),
    		AifCollectionTypeAttribute('return', types::class, classstr(JSONLineContract))
    	]
    	public List parmLines(List _lines = lines)
    	{
    		lines = _lines;
    		return lines;
    	}
    }

    An obvious problem is that you refer to lines parameter in AifCollectionTypeAttribute, but the actual name is _lines.

  • SarathVarma Profile Picture
    122 on at

    i have changed it to _lines still i'm getting empty list.

  • Martin Dráb Profile Picture
    237,892 Most Valuable Professional on at

    How are you testing it? According to your original code, you don't check the list, but the return value of parmLinesDetail(). Maybe you have a bug in this method. Note that no such method exists in the code you showed to us - are you sure you gave at the right version?

  • SarathVarma Profile Picture
    122 on at

    it's my mistake I have given code from different server but I’m referring to this method JSONContract.parmLines()

  • Martin Dráb Profile Picture
    237,892 Most Valuable Professional on at

    If you have a problem with deserializing JSONLineContract object, maybe you have a problem in the class. Please show us your code.

    Also, I would check the list directly in the debugger, rather then depending on a default conversion from a list of JSONLineContract objects to string.

  • SarathVarma Profile Picture
    122 on at

    [DataContract]
    class JSONLineContract
    {
        String50 parmFirst, parmSecond;
        [
            DataMemberAttribute('parmFirst')
        ]
        public String50 parmFirst(String50 _parmFirst = parmFirst)
        {
            parmFirst = _parmFirst;
            return parmFirst;
        }
    
        [
            DataMemberAttribute('parmSecond')
        ]
        public String50 parmSecond(String50 _parmSecond = parmSecond)
        {
            parmSecond = _parmSecond;
            return parmSecond;
        }
    
    }
    
    
    ------------------------------------------
    
    [DataContract]
    class JSONContract
    {
        String50 parmFirst, parmSecond;
        List     lines = new  List (types::Class);
        [
            DataMemberAttribute('parmFirst')
        ]
        public String50 parmFirst(String50 _parmFirst = parmFirst)
        {
            parmFirst = _parmFirst;
            return parmFirst;
        }
    
        [
            DataMemberAttribute('parmSecond')
        ]
        public String50 parmSecond(String50 _parmSecond = parmSecond)
        {
            parmSecond = _parmSecond;
            return parmSecond;
        }
    
        [DataMemberAttribute('lines'),
        aifcollectiontypeattribute('_lines', types::class, classstr(JSONLineContract)),
        aifcollectiontypeattribute('return', types::class, classstr(JSONLineContract))]
        public List parmLines(List _lines = lines)
        {
            lines = _lines;
            return lines;
        }
    
    }
    
    ---------------------------------
    
    class ReadJson
    {
        public static void main(Args _args)
        {
            str json;
            List values = new List(Types::Class);
            ListEnumerator value;
            json = '[{"FieldValues": [{"parmFirst": "ValueFirst", "parmSecond": "ValueSecond", "Lines":[{"parmFirst": "ValueFirst", "parmSecond": "ValueSecond"}] }]}]';
    
            values = FormJsonSerializer::deserializeCollection(classnum(List), json, Types::Class, classStr(JSONContract));
            value = values.getEnumerator();
            while(value.moveNext())
            {
                JSONContract JSONContractCurrent = value.current();
                info(strfmt('%1',JSONContractCurrent.parmFirst(), JSONContractCurrent.parmSecond()));
    
                info(strfmt('%1',JSONContractCurrent.parmLines()));
            }
        }
    
    }

  • Suggested answer
    Sumit Loya Profile Picture
    2,230 on at

    If I see it correctly, in Json the Node is named as "Lines" but your class data member attribute is "lines". JSON is case sensitive. try by changing the case on DataMemberAttribute for parmLines

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

Responsible AI policies

As AI tools become more common, we’re introducing a Responsible AI Use…

Neeraj Kumar – Community Spotlight

We are honored to recognize Neeraj Kumar as our Community Spotlight honoree for…

Leaderboard > Finance | Project Operations, Human Resources, AX, GP, SL

#1
Martin Dráb Profile Picture

Martin Dráb 544 Most Valuable Professional

#2
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 450 Super User 2025 Season 2

#3
Sohaib Cheema Profile Picture

Sohaib Cheema 250 User Group Leader

Last 30 days Overall leaderboard

Product updates

Dynamics 365 release plans