2015-07-10 103 views
0

我一直在努力解決以下問題幾天,最後我希望你能幫助我。我有一個正在運行的WebService,我需要返回不可序列化的IDataReader接口(它必須是DataReader - 我知道DataTable或DataSet是可序列化的,但是某些需求迫使我使用IDataReader),所以我將它序列化爲JSON可以毫無問題地發送,但現在我需要將json反序列化回客戶端的DataReader。從JSON重新創建DataReader - 序列化和反序列化

你們有什麼想法我能做到嗎?

我的JSON序列化的格式如下:

[ 
    { 
    "Cst_Id": 3, 
    "Cst_Name": "Test 1adssad", 
    "CtA_Id": 3 
    }, 
    { 
    "Cst_Id": 3, 
    "Cst_Name": "Test 1adssad", 
    "CtA_Id": 8 
    }, 
..... 
] 
+1

是不可能的序列化的數據讀取器。那JSON是毫無意義的,不能轉換回數據讀取器。 –

+1

是的,我認爲你會遇到一些問題。序列化數據讀取器沒有意義。我會推回這一要求。 – kmacdonald

+0

DB - > IDataReader - >(序列化) - > JSON - >(反序列化) - >插入數據庫 - > IDataReader「它的白癡,如果你這樣做,我會給你郵寄一罐小便......但這只是唯一的方式。「 –

回答

0

如果你被迫使用的IDataReader,您可以使用協議緩衝區DataReader的擴展對於.NET,序列化/反序列化的IDataReader,而不是JSON。

協議緩衝區在WebService中是有效的。

實施例:

string connstring1 = "Data Source=server1;Initial Catalog=northwind;user=xxx;password=xxx"; 

    //Serializing an IDataReader into a ProtoBuf: 

    Stream buffer = new MemoryStream(); 
    using (var c1 = new SqlConnection(connstring1)) 
    { 
     c1.Open(); 
     // Serialize SQL results to a buffer 
     using (var command = new SqlCommand("SELECT * FROM products", c1)) 
     using (var reader = command.ExecuteReader()) 
      DataSerializer.Serialize(buffer, reader); 

     // Deserialize, Read them back 
     buffer.Seek(0, SeekOrigin.Begin); 
     using (var reader = DataSerializer.Deserialize(buffer)) 
     { 
      while (reader.Read()) 
      { 
       Console.WriteLine(reader["ProductName"]); 
      } 
     } 
    } 

} 

詳情Protocol Buffers DataReader Extensions for .NET