将clob数据(以字符串形式)解密为C#中的实际字符串

本文关键字:字符串 解密 数据 clob | 更新日期: 2023-09-27 18:19:37

我的问题:我正在进行一个REST调用来获取一些信息,它返回一个XML文档,但我需要的值是用CLOB形式表示的

所以我有一个CLOB的字符串表示,例如"eJydVd1v4jgQf/dfkYd9uJOuEQFK6aE8OInTppeviw3…etc."

我想以纯文本的形式看到这些细节,但我不知道如何做到这一点。我搜索了解密/反序列化clobs,但一无所获。我还找到了C#的System.Data.OracleClient命名空间,但我相信这只有在从数据库中读取clob时才有帮助。

那么,有人能帮我找到一种方法,将这些clob数据解密为字符串形式,或者将字符串转换为oracle提供的clob对象吗?

非常感谢,

Fintan

将clob数据(以字符串形式)解密为C#中的实际字符串

在我的设置中,xml clob被编码为Unicode。

使用以下代码可以获得字符串:

using (ODC.OracleDataReader rdr = cmd.ExecuteReader())
{
   if (rdr.Read())
   {
       var clob = rdr.GetOracleClob(0);
       // Can not simply use clob.Value - throws ORA-03113
       // Need to read input in chunks
       long length = clob.Length;
       List<byte> bytes = new List<byte>();
       int offset = 0;
       while (offset < length)
       {
          int readLength = (int)Math.Min(1024, length - offset);
          byte[] tmp = new byte[readLength];
          int readBytes = clob.Read(tmp, 0, readLength);
          offset += readLength;
          bytes.AddRange(tmp);
       }
    string xml = System.Text.Encoding.Unicode.GetString(bytes.ToArray()); 
    return DecodeXmlString(xml);
}
else
    return null;
}