gpt4 book ai didi

c# - WCF 服务从 DataContract 接收空值

转载 作者:行者123 更新时间:2023-11-30 22:09:07 25 4
gpt4 key购买 nike

我的团队正在开发 WCF 服务来与数据库表进行通信。最近,我们注意到,如果我们向某些表中插入一条新记录,整数和 bool 值将不会保存到记录中,但字符串可以正常工作。

似乎服务中接收 DataContract 类作为参数的函数的所有非字符串属性都将具有空值。

我已经设置了一个新类来测试它:

[DataContract]
public class MyObject
{
private string _Name;

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

private int? _TestInt;

[DataMember]
public int? TestInt
{
get { return _TestInt; }
set { _TestInt = value; }
}

public MyObject()
{
_Name = "";
_TestInt = 0;
}
}

我已经在我的服务中添加了函数来简单地返回上述类中的属性值:

[OperationBehavior]
public string GetMyName(MyObject myObject)
{
return myObject.Name;
}

[OperationBehavior]
public int? GetMyTestInt(MyObject myObject)
{
return myObject.TestInt;
}

我已将客户端应用程序上的服务引用配置为不重用引用程序集中的类型。

这是我用来在客户端测试的代码:

MyObject record = new MyObject();

record.Name = "This is Me";
record.TestInt = 5;

int? returnValue = _client.GetMyTestInt(record);

string message;
if (returnValue == null)
message = "Integer value is null.";
else
message = "Integer value is " + returnValue.ToString();

MessageBox.Show(message, _client.GetMyName(record));

上面的代码显示一条消息,表明我的服务返回的整数为空,而不是我分配给它的 5。然而,GetMyName 确实为我的字符串返回了正确的值,该值显示为我的消息框的标题。

为什么服务似乎接收到空值?

最佳答案

您必须将 [DataMember] 属性添加到支持字段。

像这样改变你的契约(Contract):

[DataContract]
public class MyObject
{
[DataMember] // data contract on backing field
private string _Name;

public string Name
{
get { return _Name; }
set { _Name = value; }
}

[DataMember] // data contract on backing field
private int? _TestInt;

public int? TestInt
{
get { return _TestInt; }
set { _TestInt = value; }
}

public MyObject()
{
_Name = "";
_TestInt = 0;
}
}

关于c# - WCF 服务从 DataContract 接收空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21737691/

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