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 在应用程序之间工作