C# 无法返回null(System.Boolean不能为null)

C# 无法返回null(System.Boolean不能为null),c#,wcf,visual-studio,linq-to-sql,C#,Wcf,Visual Studio,Linq To Sql,我想使用WCF服务从数据库向WP页返回int和bool值。当数据库中的这些字段为空时,我得到一个异常: 格式化程序在尝试反序列化 消息:尝试反序列化参数时出错 . InnerException消息被删除 “ValueType”System.Boolean“不能为空。请参见内部异常 更多细节 对于int类型,我也有同样的问题 我的数据库的一部分如下所示: [boolValue] BIT NULL, [intValue] INT NULL, 我的服务实施: pu

我想使用WCF服务从数据库向WP页返回int和bool值。当数据库中的这些字段为空时,我得到一个异常:

格式化程序在尝试反序列化 消息:尝试反序列化参数时出错 . InnerException消息被删除 “ValueType”System.Boolean“不能为空。请参见内部异常 更多细节

对于int类型,我也有同样的问题

我的数据库的一部分如下所示:

[boolValue]    BIT    NULL,
[intValue]     INT    NULL,
我的服务实施:

     public someClass someFunc(int check)
    {
return (from a in datacontext.someTable
                where a.number == check
                select new someClass ()
                {
                    intValue2 = (int?)a.intValue ,
                    boolValue2 = (bool?)a.boolValue,                
                }).Single();
    }
我的服务界面:

    [OperationContract]
   someClass someFunc(int check);

    [DataContract]
        public class someClass 
        {
            [DataMember]
            public int? intValue2 { get; set; }
            [DataMember]
            public bool? boolValue2 { get; set; }
        }

由于最近引入了Nullable字段,所以客户端对我的服务的引用并没有更新。更新引用后,它工作。

数据库null与标准null不同

使用此功能

 static bool ConvertToBool(object Dnull)
        {
            try
            {
                DBNull a = (DBNull)Dnull;
                string u = a.ToString();

                if (u.Length > 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            catch (InvalidCastException e)
            {
                return false;
            }

        }


这在mysql中可以很好地工作。

如果您最近引入了Nullable字段,您可能需要更新服务客户端的引用。代理似乎仍然期望bool而不是bool?您是否绑定到WS-SOAP服务?SOAP并不总是很好地处理空值。@Habib,我的服务实现代码中有一个错误,它没有更新。谢谢,现在成功了!这只是DBNull不能直接转换的想法,我急需它
bool Isnull = ConvertToBool(_sqldatareader["Name"]);