关于D365/AX2012/C#中的那些json、对象、字符串类型间的转换

今天有同事问我关于AX2012里,如何直接输出json字符串的问题,这里就顺手写点东西跟大家分享下。

一.AX2012中将字段信息序列化成json字符串:

1.1.AX2012中将字段信息序列化成json字符串截图;

 1.2.关键代码:

static void Alfred_Field2Json(Args _args)
{
    System.IO.StringWriter stringWriter;
    Newtonsoft.Json.JsonTextWriter jsonWriter;
    str     returnJsonstr, res;
    stringWriter = new System.IO.StringWriter();
    jsonWriter = new Newtonsoft.Json.JsonTextWriter(stringWriter);
       
    jsonWriter.WriteStartObject();
    jsonWriter.WritePropertyName("FieldId1");
    jsonWriter.WriteValue("FieldValue1");
    jsonWriter.WritePropertyName('FieldId2');
    jsonWriter.WriteValue("FieldValue2");
    jsonWriter.WritePropertyName("FieldId3");
    jsonWriter.WriteValue("FieldValue3");
    jsonWriter.WriteEndObject();
    returnJsonstr = stringWriter.ToString();
    info(returnJsonstr);
}
二.D365中将json反序列化成实体类:
myentity entity;
list = FormJSONSerializer::deserializeCollection(classnum(List), json字符串,Types::Class,'myentity');
 listEnumerator = list.getEnumerator();
 while (listEnumerator.moveNext())
  {
          entity= listEnumerator.current();
  }
三.D365中,将实体对象序列化成json字符串;
FormJSONSerializer::serializeClass(实体对象);
该类FormJSONSerializer可以实现对象和json的序列化与反序列化处理。
 
四.D365/AX2012 提供接口,一次传多条记录;
[AifCollectionTypeAttribute('return', Types::Class, classStr(DownFileValuelEntity))]
    public List<DownFileValuelEntity> downloadDN(FielEntity _fielEntity)
    {
        DownFileValuelEntity  valueEntity = new DownFileValuelEntity();
        List valueEntities = new List(types::Class);
      
        valueEntities.addEnd(valueEntity);
         
        return valueEntities;
    }
五.D365/AX2012通过map反序列化;
 
    str jsonstr ='{"FieldValues":[{"FieldName":"Field1","FieldValue":"Rec1Field1Value"},'+
    '{"FieldName":"Field2","FieldValue":"Rec1Field2Value"}]}';
    Map     jsonMap, lineMap;
    container   lineCon;
    container   itemsCon;
    ListEnumerator          listEnumerator;
    mapEnumerator           mapEnumerator;
    List                    lineList;
    ;
    jsonMap = RetailCommonWebAPI::getMapFromJsonString(jsonstr);
    if (jsonMap.exists("FieldValues"))
    {
        itemsCon = jsonMap.lookup("FieldValues");
        lineList = List::create(itemsCon);
        listEnumerator = lineList.getEnumerator();
        while (listEnumerator.moveNext())
        {
            lineCon = listEnumerator.current();
            lineMap = Map::create(lineCon);
            info(lineMap.lookup("FieldName"));
            info(lineMap.lookup("FieldValue"));
        }
    }
posted @ 2020-06-01 22:09  Alfred_CN  阅读(653)  评论(0编辑  收藏  举报