看来序列化器有问题。您也许可以传递类似于Type
的FormRunConfigurationPropertyClassList
数组?
我正在尝试将一些JSON输入序列化为Microsoft Dynamics 365 Finance中的数据协定。一个简单的数据协定类可以正常工作,但是我无法获得数据协定扩展。有没有人有这个或一个可行的例子的经验?
我设法找到的唯一与此主题相关的信息来自this forum post。跟随一些超链接,您将得到official Microsoft documentation (Ref# 199219),该状态应支持。
下面数据契约属性的所有变体都可以编译,但是对我而言证明是不成功的:
DataContract
和DataMember
代替DataContractAttribute
和DataMemberAttribute
。DataContract
和DataContractAttribute
结合在一个方法上。 (产生关于双重序列化属性的运行时错误。)DataContractAttribute
。JSON deserializer class通过其各种构造函数选项进行的其他实验也未成功:
ClassA
和ClassA_Extension
的列表。ClassA_Extension
和ClassA
的列表(如果列表顺序有影响,则将其传递给您。)>IgnoreExtensionDataObject
显式设置为false
(这似乎是默认设置。)>下面是一个证明我的问题的小例子。按预期填充变量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();
}
}
结果
我正在尝试将一些JSON输入序列化为Microsoft Dynamics 365 Finance中的数据协定。一个简单的数据协定类可以正常工作,但是我无法获得数据协定扩展。是否有任何一个...
看来序列化器有问题。您也许可以传递类似于Type
的FormRunConfigurationPropertyClassList
数组?