2017-04-24 15 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

나는 이것이 당신이 원하는 것이지만 그것이 도움이 될지 모르겠다. 이 방법을 사용하면 null 값에 대해 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; 
     }