【问题标题】:HanaDecimal has not a serializable attributeHanaDecimal 没有可序列化的属性
【发布时间】:2019-10-15 00:20:54
【问题描述】:

我正在尝试将 Dapper 与 Hana 提供程序一起使用(HANA .Net Core 2.1 ADO.NET 提供程序,参见 SAP 库“SAP HANA 客户端接口编程参考 for SAP HANA 平台”中的Microsoft .NET Core Support)。随便DataReader 一切正常,但是当我尝试使用包含小数类型的实体类和 Dapper 时出现问题:

public class SomeType 
{
    public string Text { get; set; }
    public decimal Value { get; set; }
}

var resultSet = hanaConnection.Query<SomeType>("some hana sql");

不幸的是,抛出了以下异常:

在程序集“Sap.Data.Hana.Core.v2.1”中键入“Sap.Data.Hana.HanaDecimal”, 版本=2.4.151.0,文化=中性,PublicKeyToken=0326b8ea63db4bc4' 未标记为可序列化。

我尝试为decimal 创建自己的类型处理程序,但运气不好:

public class DecimalTypeHandler : SqlMapper.TypeHandler<decimal>
{
    public override decimal Parse(object value)
    {
        return Convert.ToDecimal(value);
    }

    public override void SetValue(IDbDataParameter parameter, decimal value)
    {
        parameter.Value = value;
    }
}

甚至没有调用 Mapper,所以我想在从 db 获取数据时会引发错误。

由于我无法将Serializable 属性添加到专有的源代码封闭程序集,因此有什么解决方法吗?

【问题讨论】:

  • @jdweng 仍然 - dapper 检测到它没有用[Serializable] 属性标记。
  • @pwas 嗨;这里是 Dapper 的主要作者;我可以看到该异常的堆栈跟踪吗?我不记得曾经检查或关心过[Serializable];事实上:Find all "serializable", Subfolders, Find Results 1, Entire Solution, "*.*" Matching lines: 0 Matching files: 0 Total files searched: 196
  • 只要属性/类是公共的,序列化程序就可以在没有 [Serializable] 的情况下工作。问题是类型错误。它不是一个小数,而是一个结构。
  • @pwas k;删除 dapper 标记,然后 - 因为这似乎不相关

标签: c# hana


【解决方案1】:

在查询前添加类型处理程序:

 SqlMapper.AddTypeHandler(new DecimalTypeHandler ());
 var resultSet = hanaConnection.Query<SomeType>("some hana sql");

【讨论】:

  • 我已经按照问题中的说明添加了它 - 没有运气。
  • 请查看更新后的答案;尝试重新定义处理程序
  • 仍然无法正常工作。类型处理程序甚至没有被调用——首先抛出异常。
【解决方案2】:

感谢 Marc Gravell 指导我查看堆栈跟踪,结果证明序列化是由其他人添加的,它与 dapper 无关。

使用问题中提供的DecimalTypeHandler,一切都在工作。

【讨论】:

    猜你喜欢
    • 2017-01-08
    • 1970-01-01
    • 2015-03-17
    • 2013-06-16
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多