首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataContractSerializer - DBNull.Value

DataContractSerializer - DBNull.Value
EN

Stack Overflow用户
提问于 2017-04-24 14:25:39
回答 1查看 285关注 0票数 0

从我的WCF客户端,我调用服务的一个方法。作为参数,我传递了一个位数组,它是我的自定义类的序列化对象:

代码语言:javascript
复制
public class MySqlCommand
{
    public string CommandText;
    public List<object[]> Parameters;

    public MySqlCommand()
    {
        Parameters = new List<object[]>();
    }
    public static MySqlCommand GetSQLCommand(string CommandID)
    {
        MySqlCommand command = new MySqlCommand();
        command.CommandText = CommandID;
        return command;
    }
}

问题是list参数中的数组可以包含DataContractSerializer默认不支持的DBNull.Value。如果我将DBNull添加到支持的类型中,代码会变慢很多,所以我不能用这种方式解决它。我怎么才能让它工作呢?

EN

回答 1

Stack Overflow用户

发布于 2017-04-26 22:08:43

我不确定这是不是你想要的,但它可能会有所帮助。使用此方法,您可以检查DataSet中的空值并替换它们:

代码语言:javascript
复制
public static DataSet DBNull(DataSet dataSet)
    {
        try
        {
            foreach (DataTable dataTable in dataSet.Tables)
                foreach (DataRow dataRow in dataTable.Rows)
                    foreach (DataColumn dataColumn in dataTable.Columns)
                        if (dataRow.IsNull(dataColumn))
                        {
                            if (dataColumn.DataType.IsValueType) dataRow[dataColumn] = Activator.CreateInstance(dataColumn.DataType);
                            else if (dataColumn.DataType == typeof(bool)) dataRow[dataColumn] = false;
                            else if (dataColumn.DataType == typeof(Guid)) dataRow[dataColumn] = Guid.Empty;
                            else if (dataColumn.DataType == typeof(string)) dataRow[dataColumn] = string.Empty;
                            else if (dataColumn.DataType == typeof(DateTime)) dataRow[dataColumn] = DateTime.MaxValue;
                            else if (dataColumn.DataType == typeof(int) || dataColumn.DataType == typeof(byte) || dataColumn.DataType == typeof(short) || dataColumn.DataType == typeof(long) || dataColumn.DataType == typeof(float) || dataColumn.DataType == typeof(double)) dataRow[dataColumn] = 0;
                            else dataRow[dataColumn] = null;
                        }

            return dataSet;
        }
        catch (Exception ex)
        {
            return dataSet;
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43581111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档