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

DataContract, default DataMember value will api work between applications

我有一个 class 这样的:

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

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

我的四个(app1、app2、app3、app4)应用程序正在使用此合约。 截至目前,一切正常 运行。但是我有一个新的要求,要在接口中添加一个新成员,这是一个字典。

新的class会是这样的:

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

现在我的问题是,由于 class 定义已更改,我的 app1 和 app2 将使用新的 class 定义进行编译,因为 app1 和 app2 需要字典,而 app3 和 app4 不需要想要那个,这就是为什么我创建字典作为默认参数的原因。

现在,如果 app3 或 app4 没有使用新的 class 定义进行编译并调用 GetMyInfo(MyInfo myInfo) 事情会起作用吗,我的意思是所有序列化都不会中断。

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

Client1 使用这样的 class:

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

服务器端将收到此消息:

Client2 使用这样的 class:

        [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;}
       }

服务器端将收到此消息:

服务器端使用与客户端2相同的classes。