首页 > 解决方案 > 序列化动态 ax 365 数据合约扩展

问题描述

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

我设法找到的关于这个主题的唯一相关信息来自这个论坛帖子。按照一些超链接,您最终会得到官方的 Microsoft 文档 (Ref# 199219),其中指出应该支持这一点。

以下数据合同属性的所有变体都可以正常编译,但对我来说证明是不成功的:

通过其各种构造函数选项对JSON 反序列化器类进行的其他实验也被证明是不成功的:


更新

已向 Microsoft 提出票证以调查此问题。在他们的回复中,他们提到他们能够重现这一点。他们还宣称这是“设计使然”并且“不会被修复”

我们的最终解决方案很可能如下:

  1. 构建DataMemberAttribute值的映射和相应的数据协定方法。
  2. 使用JavaScriptSerializer对象将 JSON 转换为嵌套的 .NET 字典对象。
  3. 在映射的帮助下遍历字典对象并填充数据协定。

例子

下面是一个演示我的问题的最小示例。变量value1和的值value2按预期填充,但变量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();
    }

}

结果

在此处输入图像描述

标签: serializationaxaptax++dynamics-365-operations

解决方案


看起来序列化程序有问题。你也许能够传递一个Type类似于它的数组FormRunConfigurationPropertyClassList呢?

在此处输入图像描述


推荐阅读