【问题标题】:DataContract, default DataMember value will api work between applicationsDataContract,默认 DataMember 值将 api 在应用程序之间工作
【发布时间】: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),那么一切都会正常工作,我的意思是所有序列化都不会中断。

【问题讨论】:

    标签: c# wcf datacontractserializer datacontract


    【解决方案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 相同的类。

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多