Serialize dynamics ax 365数据协定扩展名

问题描述 投票:2回答:1

我正在尝试将一些JSON输入序列化为Microsoft Dynamics 365 Finance中的数据协定。一个简单的数据协定类可以正常工作,但是我无法获得数据协定扩展。有没有人有这个或一个可行的例子的经验?

我设法找到的唯一与此主题相关的信息来自this forum post。跟随一些超链接,您将得到official Microsoft documentation (Ref# 199219),该状态应支持。

下面数据契约属性的所有变体都可以编译,但是对我而言证明是不成功的:

  • 使用DataContractDataMember代替DataContractAttributeDataMemberAttribute
  • DataContractDataContractAttribute结合在一个方法上。 (产生关于双重序列化属性的运行时错误。)
  • 在扩展类别上重复DataContractAttribute
  • JSON deserializer class通过其各种构造函数选项进行的其他实验也未成功:

  • 传递已知类型ClassAClassA_Extension的列表。
  • 传递已知类型ClassA_ExtensionClassA的列表(如果列表顺序有影响,则将其传递给您。)>
  • 传递设置对象并将IgnoreExtensionDataObject显式设置为false(这似乎是默认设置。)>
  • 将扩展类类型作为第一个参数传递。

  • 示例

    下面是一个证明我的问题的小例子。按预期填充变量value1value2的值,但变量value3保持为空。

    数据合同

[DataContractAttribute('Class A')]
public class ClassA
{
    protected str value1;
    protected str value2;

    [DataMemberAttribute('Value1')]
    public str value1(str _value1 = value1)
    {
        value1 = _value1;
        return value1;
    }

    [DataMemberAttribute('Value2')]
    public str value2(str _value2 = value2)
    {
        value2 = _value2;
        return value2;
    }

}

数据合同扩展名

[ExtensionOf(classStr(ClassA))]
public final class ClassA_Extension
{
    private str value3;

    [DataMemberAttribute('Value3')]
    public str value3(str _value3 = value3)
    {
        value3 = _value3;
        return value3;
    }

}

序列化代码,带有硬编码的输入

public class ClassTest
{
    public static void main(Args _args)
    {
        str inputJSON =   @'{
                                "Value1": "abc",
                                "Value2": "def",
                                "Value3": "ghi"
                            }';

        ClassA ret = new ClassA();

        System.IO.MemoryStream ms = new System.IO.MemoryStream(System.Text.Encoding::UTF8.GetBytes(inputJSON));

        System.Runtime.Serialization.Json.DataContractJsonSerializer dcjSer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(ret.GetType());

        ret = dcjSer.ReadObject(ms);

        ms.Close();
    }

}

结果

enter image description here

我正在尝试将一些JSON输入序列化为Microsoft Dynamics 365 Finance中的数据协定。一个简单的数据协定类可以正常工作,但是我无法获得数据协定扩展。是否有任何一个...

看来序列化器有问题。您也许可以传递类似于TypeFormRunConfigurationPropertyClassList数组?

enter image description here

serialization axapta x++ dynamics-365-operations
1个回答
0
投票

看来序列化器有问题。您也许可以传递类似于TypeFormRunConfigurationPropertyClassList数组?

© www.soinside.com 2019 - 2024. All rights reserved.