2017-04-24 13 views
0

私のWCFクライアントから、私はサービスにメソッドを呼び出します。引数として、私は私のカスタムクラスのシリアライズされたオブジェクトであるビットの配列を渡す:DataContractSerializer - DBNull.Value

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

問題は、リストのパラメータで配列がでDataContractSerializerによってサポートされていないDBNull.Valueのを含めることができるということですデフォルト。サポートされている型にDBNullを追加すると、コードが大きく減速するため、この方法では解決できません。どうすればそれを動作させることができますか?

+2

"それは多くの速度が遅くなる"とはどういう意味ですか? 「即座に働かない」と比べて?それは確かに...おそらく把握する*なぜ*それは動作するときに遅いですか?ああ、いくつかのコードを貼り付けます。貼り付けたコードには、あなたの質問のテキストとは何も関係ありません。 – nvoigt

答えて

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; 
     } 
関連する問題