【问题标题】:DataContractSerializer - DBNull.ValueDataContractSerializer - DBNull.Value
【发布时间】:2017-04-24 06:25:39
【问题描述】:

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

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;
    }
}

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

【问题讨论】:

  • 你说的“它变慢了很多”是什么意思?与“立即不起作用”相比?它确实...也许弄清楚为什么它在工作时很慢?哦,粘贴一些代码,您粘贴的代码与您的问题文本无关

标签: c# wcf serialization null dbnull


【解决方案1】:

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

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;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多