从JSON重新创建数据阅读器-序列化和反序列化

本文关键字:序列化 反序列化 数据 JSON 新创建 创建 | 更新日期: 2023-09-27 18:02:20

我已经为以下问题挣扎了好几天了,最后我希望你能帮助我。

我有一个正在运行的WebService,我需要从中返回不可序列化的IDataReader接口(它必须是DataReader -我知道DataTable或DataSet是可序列化的,但某些要求迫使我使用IDataReader),所以我将其序列化为JSON,可以毫无问题地发送,但现在我需要将JSON反序列化回客户端DataReader。

你们知道我怎么才能做到吗?

我的JSON被序列化为以下格式:

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

从JSON重新创建数据阅读器-序列化和反序列化

如果你被迫使用IDataReader,你可以使用。net的协议缓冲区DataReader扩展来序列化/反序列化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"]);
            }
        }
    }
}

详细信息,.NET协议缓冲区数据阅读器扩展