gpt4 book ai didi

c# - WCF 服务默认值

转载 作者:可可西里 更新时间:2023-11-01 09:10:40 25 4
gpt4 key购买 nike

我的 WCF 服务有以下数据协定类:

[DataContract(Name = "MyClassDTO")]
public class MyClass
{
private string name = "Default Name";

[DataMember]
public string Name
{
get { return name; }
set { name = value; }
}
}

当我使用 Visual Studio 的添加服务引用函数生成 WCF 服务引用时,生成的 DataContract 看起来像这样:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name = "MyClassDTO", Namespace = "xxx")]
[System.SerializableAttribute()]
public partial class MyClassDTO : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
{

[System.Runtime.Serialization.OptionalFieldAttribute()]
private string NameField;

[System.Runtime.Serialization.DataMemberAttribute()]
public string Name
{
get
{
return this.NameField;
}
set
{
if ((object.ReferenceEquals(this.NameField, value) != true))
{
this.NameField = value;
this.RaisePropertyChanged("Name");
}
}
}
}

这意味着,默认值“Default Name”丢失并发生以下行为:

MyClassDTO mcdto = new MyClassDTO();
serviceClient.DoSomething(mcdto);


[OperationContract]
void DoSomething(MyClass mc){
mc.Name //<-- == null but I want it to be "Default Name"
}

有没有办法以这种方式配置数据协定,定义的默认值“默认名称”不会丢失?

附加信息:我使用服务引用在引用的程序集中重用类型,例如在客户端生成类 MyClassDTO 并不知道服务器端类 MyClass

最佳答案

到目前为止,我发现的唯一可能(但很丑,因此并不真正令人满意)的解决方案是使用 OnDeserializing 属性在反序列化开始时设置默认值,并使用字段的 setter以确定是否应该真正设置传达的值。

   [DataContract(Name = "MyClassDTO")]
public class MyClass
{
private string name;

public MyClass()
{
Init();
}

[DataMember]
public string Name
{
get{ return name; }
set
{
if (!String.IsNullOrEmpty(value))
{
name = value;
}
}
}

private void Init()
{
name = "Default Name";
}

[System.Runtime.Serialization.OnDeserializing]
private void OnDeserializing(StreamingContext ctx)
{
Init();
}
}

关于c# - WCF 服务默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2041663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com