C# DataContract,默认DataMember值将在应用程序之间工作
我有一门课是这样的:C# DataContract,默认DataMember值将在应用程序之间工作,c#,wcf,datacontractserializer,datacontract,C#,Wcf,Datacontractserializer,Datacontract,我有一门课是这样的: [DataContract, Serializable] public class MyInfo { string firstName; string fullName; } [DataContract, Serializable] public class MyInfo { string firstName; string fullName; Dict
[DataContract, Serializable]
public class MyInfo
{
string firstName;
string fullName;
}
[DataContract, Serializable]
public class MyInfo
{
string firstName;
string fullName;
Dictionary<string, string> parameter = null;
}
[DataContract, Serializable]
public class MyInfo
{
[DataMember(Name = "firstName")]
public string firstName { get; set; }
[DataMember(Name = "fullName")]
public string fullName { get; set; }
}
[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;}
}
有一个像GetMyInfoMyInfo这样公开的api,上面的类正在其中使用
我的四个App1、app2、app3、app4应用程序正在使用此合同。
到目前为止,一切都很顺利。但是我得到了一个新的要求,即向接口添加一个新成员,该接口是一个字典
新类将如下所示:
[DataContract, Serializable]
public class MyInfo
{
string firstName;
string fullName;
}
[DataContract, Serializable]
public class MyInfo
{
string firstName;
string fullName;
Dictionary<string, string> parameter = null;
}
[DataContract, Serializable]
public class MyInfo
{
[DataMember(Name = "firstName")]
public string firstName { get; set; }
[DataMember(Name = "fullName")]
public string fullName { get; set; }
}
[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;}
}
现在我的问题是,由于类定义已更改,我的app1和app2将使用新的类定义编译,因为app1和app2需要字典,而app3和app4不需要字典,这就是我创建字典作为默认参数的原因
现在,如果app3或app4没有使用新的类定义编译,并且调用GetMyInfoMyInfo myInfo,那么这些东西会工作吗,我的意思是所有的序列化都不会中断。根据您的描述,我制作了一个演示,可以正常运行。我没有发现任何错误 Client1使用如下类:
[DataContract, Serializable]
public class MyInfo
{
string firstName;
string fullName;
}
[DataContract, Serializable]
public class MyInfo
{
string firstName;
string fullName;
Dictionary<string, string> parameter = null;
}
[DataContract, Serializable]
public class MyInfo
{
[DataMember(Name = "firstName")]
public string firstName { get; set; }
[DataMember(Name = "fullName")]
public string fullName { get; set; }
}
[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, Serializable]
public class MyInfo
{
string firstName;
string fullName;
}
[DataContract, Serializable]
public class MyInfo
{
string firstName;
string fullName;
Dictionary<string, string> parameter = null;
}
[DataContract, Serializable]
public class MyInfo
{
[DataMember(Name = "firstName")]
public string firstName { get; set; }
[DataMember(Name = "fullName")]
public string fullName { get; set; }
}
[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相同的类