看来序列化器有问题。您也许可以传递类似于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
数组?