C# DataContractSerializer-DBNull.Value
从我的WCF客户端,我调用了一个服务方法。作为参数,我传递一个位数组,它是自定义类的序列化对象:C# DataContractSerializer-DBNull.Value,c#,wcf,serialization,null,dbnull,C#,Wcf,Serialization,Null,Dbnull,从我的WCF客户端,我调用了一个服务方法。作为参数,我传递一个位数组,它是自定义类的序列化对象: public class MySqlCommand { public string CommandText; public List<object[]> Parameters; public MySqlCommand() { Parameters = new List<object[]>(); } public
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;
}
}
公共类MySqlCommand
{
公共字符串命令文本;
公共列表参数;
公共MySqlCommand()
{
参数=新列表();
}
公共静态MySqlCommand GetSQLCommand(字符串CommandID)
{
MySqlCommand=newmysqlcommand();
command.CommandText=CommandID;
返回命令;
}
}
问题是列表参数中的数组可能包含DBNull.Value,默认情况下DataContractSerializer不支持该值。如果我将DBNull添加到支持的类型中,代码会慢很多,因此我无法用这种方式解决它。我怎样才能让它工作呢?我不确定这是否是您想要的,但它可能会有所帮助。使用此方法,您可以检查
数据集
中的空值并替换它们:
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;
}
你说的“它慢了很多”是什么意思?与“立即不工作”相比?确实是。。。也许能弄明白为什么它工作起来很慢?哦,粘贴一些代码,您粘贴的代码与您的问题文本无关。