DataContract,默认 DataMember 值将 api 在应用程序之间工作

Posted

技术标签:

【中文标题】DataContract,默认 DataMember 值将 api 在应用程序之间工作【英文标题】:DataContract, default DataMember value will api work between applications 【发布时间】:2020-09-05 16:45:59 【问题描述】:

我有这样的课:

[DataContract, Serializable]
    public class MyInfo
    
        string firstName;
        string fullName;
    

有一个像 GetMyInfo(MyInfo myInfo) 这样暴露的 api,其中使用了上面的类。

我的四个(app1、app2、app3、app4)应用程序正在使用此合同。 到目前为止,一切都运行良好。但我有一个新要求,即向接口添加一个新成员,即字典。

新的类会是这样的:

[DataContract, Serializable]
    public class MyInfo
    
        string firstName;
        string fullName;
        Dictionary<string, string> parameter = null;
    

现在我的问题是,由于类定义已更改,我的 app1 和 app2 将使用新的类定义进行编译,因为 app1 和 app2 需要字典,而 app3 和 app4 不希望这样,这就是我将字典创建为默认值的原因参数。

现在,如果 app3 或 app4 没有使用新的类定义进行编译并调用 GetMyInfo(MyInfo myInfo),那么一切都会正常工作,我的意思是所有序列化都不会中断。

【问题讨论】:

【参考方案1】:

根据你的描述,我做了一个demo,可以正常运行,没发现什么问题。

Client1 使用这样的类:

        [DataContract, Serializable]
        public class MyInfo
       
          [DataMember(Name = "firstName")]
          public string firstName  get; set; 
          [DataMember(Name = "fullName")]
          public string fullName  get; set; 
       

服务器端会收到这条消息:

Client2 使用这样的类:

        [DataContract, Serializable]
        public class MyInfo
       
            [DataMember(Name = "firstName")]
            public string firstName  get; set; 
            [DataMember(Name = "fullName")]
            public string fullName  get; set; 
            [DataMember(Name = "parameter")]
            public Dictionary<string, string> parameter  get; set;
       

服务器端将收到此消息:

服务器端使用与 client2 相同的类。

【讨论】:

以上是关于DataContract,默认 DataMember 值将 api 在应用程序之间工作的主要内容,如果未能解决你的问题,请参考以下文章

DataContract,默认 DataMember 值将 api 在应用程序之间工作

WCF REST 服务中的响应时间问题非常重要_更多 10 分钟

如何找出类是不是具有 DataContract 属性?

包含异常的 DataContract

从 XSD 生成 DataContract