Serialization 序列化dynamics ax 365数据协定扩展
我正在尝试将一些JSON输入序列化到Microsoft Dynamics 365 Finance中的数据契约中。一个简单的数据契约类可以正常工作,但我无法让数据契约扩展正常工作。有没有人有过这方面的经验,或者是一个有效的例子 我在这个主题上找到的唯一相关信息来自。 跟随一些超链接,您将得到,这表明这应该得到支持 以下数据契约属性的所有变体都可以编译,但对我来说都不成功:Serialization 序列化dynamics ax 365数据协定扩展,serialization,axapta,x++,dynamics-365-operations,Serialization,Axapta,X++,Dynamics 365 Operations,我正在尝试将一些JSON输入序列化到Microsoft Dynamics 365 Finance中的数据契约中。一个简单的数据契约类可以正常工作,但我无法让数据契约扩展正常工作。有没有人有过这方面的经验,或者是一个有效的例子 我在这个主题上找到的唯一相关信息来自。 跟随一些超链接,您将得到,这表明这应该得到支持 以下数据契约属性的所有变体都可以编译,但对我来说都不成功: 使用DataContract和DataMember而不是DataContractAttribute和DataMemberAt
- 使用
和DataContract
而不是DataMember
和DataContractAttribute
DataMemberAttribute
- 在单个方法上组合
和DataContract
。(产生有关双重序列化属性的运行时错误。)DataContractAttribute
- 在扩展类上重复
DataContractAttribute
- 传递已知类型的列表
和ClassA
ClassA\u扩展名
- 传递已知类型的列表
和ClassA_Extension
(以防列表顺序产生影响)ClassA
- 传递设置对象并将
显式设置为忽略扩展数据对象
(这似乎是默认设置)false
- 将扩展类类型作为第一个参数传递
更新 已向Microsoft提出调查该问题的通知单。在他们的回复中,他们提到他们能够复制这一点。他们还宣布,这是“有意”的,“不会被修正” 我们的最终解决方案很可能是:
DataMemberAttribute
值与相应数据契约方法的映射JavaScriptSerializer
对象将JSON转换为嵌套的.NET字典对象例子 下面是一个模拟的例子来说明我的问题。变量
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();
}
}
结果
[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;
}
}
序列化程序似乎有问题。您可能能够传递一个
类型
数组,类似于FormRunConfigurationPropertyClassList
的传递方式
谢谢您的意见!我查看了JSON序列化程序,并提供了一些附加参数。不幸的是没有成功。。。我已将我尝试的内容添加到问题描述中。它看起来像一个bug:(这正是我所担心的。如果我通过Microsoft罚单获得任何反馈,那么我将更新此问题。Microsoft反馈已添加为问题中的更新部分…@Sander我在推特上发布了此消息,以查看
AX
社区中的任何人是否有任何其他想法或解决方法。但可能无法获得支持。