首页 文章

WCF服务从DataContract接收空值

提问于
浏览
2

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

服务中接收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));

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

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

2 回答

  • 2

    您必须将[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;
        }
    }
    
  • 1

    在DataContract中添加Property属性

    [DataMember(IsRequired = true)]

相关问题