C# Nhibernate无法反序列化可序列化属性

C# Nhibernate无法反序列化可序列化属性,c#,nhibernate,nhibernate-mapping,C#,Nhibernate,Nhibernate Mapping,我在sql类中有一个表,它必须包含两列,一列是ID,另一列是fImage。fImage列的数据类型为Image。我正在使用nhibernate加载所有图像,并希望将其绑定到图片框控件中。但是,当使用nhibernate读取数据时,我们遇到异常,nhibernate无法反序列化可序列化属性 我浏览了stackoverflow和google上的一些链接,但似乎什么都不适合我 这里我给出了hbm文件和类文件的示例 namespace BlackOpsP2.Core.Domain.ARModule {

我在sql类中有一个表,它必须包含两列,一列是ID,另一列是fImage。fImage列的数据类型为Image。我正在使用nhibernate加载所有图像,并希望将其绑定到图片框控件中。但是,当使用nhibernate读取数据时,我们遇到异常,nhibernate无法反序列化可序列化属性

我浏览了stackoverflow和google上的一些链接,但似乎什么都不适合我

这里我给出了hbm文件和类文件的示例

namespace BlackOpsP2.Core.Domain.ARModule
{
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;

/// <summary>
/// Documentation for the tARReportLogo.
/// </summary>
public partial class tARReportLogo : DomainObject<System.Guid>
{
    #region Constructor
    /// <summary>
    /// Initializes a new instance of the <see cref="tARReportLogo"/> class.
    /// </summary>
    public tARReportLogo()
    {
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="tARReportLogo"/> class.
    /// </summary>
    /// <param name="fReportLogoID">The Payment Type ID.</param>
    public tARReportLogo(System.Guid fReportLogoID)
    {
        this.ID = fReportLogoID;
    }

    #endregion        

    #region Properties

    /// <summary>
    /// Gets or sets ReportLogoID.
    /// </summary> 
    public virtual System.Guid fReportLogoID { get; set; }

    /// <summary>
    /// Gets or sets Image ID.
    /// </summary> 
    public virtual System.Guid fImageID { get; set; }

    /// <summary>
    /// Gets or sets Image Name.
    /// </summary> 
    public virtual string fImageName { get; set; }

    /// <summary>
    /// Gets or sets Image Value.
    /// </summary> 
    public virtual Image fImageValue { get; set; }                

    #endregion

    #region Methods
    /// <summary>
    /// Joins a first name and a last name together into a single string.
    /// </summary>    
    /// <returns>The hash code.</returns>
    public override int GetHashCode()
    {
        return ID.GetHashCode();
    }
    #endregion
}
}
名称空间BlackOpsP2.Core.Domain.ARModule
{
使用制度;
使用System.Collections.Generic;
使用系统文本;
使用系统图;
/// 
///tARReportLogo的文档。
/// 
公共部分类tARReportLogo:DomainObject
{
#区域构造函数
/// 
///初始化类的新实例。
/// 
公共交通标志()
{
}
/// 
///初始化类的新实例。
/// 
///付款类型ID。
公共tARReportLogo(System.Guid fReportLogoID)
{
this.ID=fReportLogoID;
}
#端区
#区域属性
/// 
///获取或设置ReportLogoID。
///  
公共虚拟系统.Guid fReportLogoID{get;set;}
/// 
///获取或设置图像ID。
///  
公共虚拟系统.Guid fImageID{get;set;}
/// 
///获取或设置图像名称。
///  
公共虚拟字符串fImageName{get;set;}
/// 
///获取或设置图像值。
///  
公共虚拟映像fImageValue{get;set;}
#端区
#区域方法
/// 
///将名字和姓氏合并为一个字符串。
///     
///散列码。
公共覆盖int GetHashCode()
{
返回ID.GetHashCode();
}
#端区
}
}
这是hbm文件

<?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping assembly="BlackOpsP2.Core" namespace="BlackOpsP2.Core.Domain.ARModule" xmlns="urn:nhibernate-mapping-2.2">
  <class name="tARReportLogo" table="tARReportLogo" lazy="true" >
     <id name="fReportLogoID">
        <generator class="guid" />
     </id>    
     <property name="fImageID">
     </property>
     <property name="fImageName" >     
     </property>
     <property name="fImageValue" type="Serializable" length="2147483647">
     </property>    
  </class>
</hibernate-mapping>

我使用的是nhibernate版本3.3

谢谢,

将您的C#属性更改为
字节[]

public partial class tARReportLogo : DomainObject<System.Guid>
{
  ...
  public virtual byte[] fImageValue { get; set; }  // image as a byte array
  ...
}
公共部分类tARReportLogo:DomainObject
{
...
公共虚拟字节[]fImageValue{get;set;}//作为字节数组的图像
...
}
您的映射不需要比这个更多的东西

<property name="fImageValue" length="2147483647" />


您可以在C#中进行的任何其他转换(到映像实例或其他任何转换)。NHiberante将把
byte[]
映射到SQL Server
image

{“输入流不是有效的二进制格式。起始内容(以字节为单位)是:42-4D-DE-19-00-00-00-00-00-00-00-00-36-04-00-00-28-00-00-00…”当我们将类型从image更改为byte[]时,我们无法将image与picturebox control绑定。我正在使用数据绑定属性绑定PictureBox控件中的图像。它只是一个DB部分。DB
图像
类型到C#type
字节[]
的映射。您可以将其标记为受保护:
protectedvirtualbyte[]fImageValue{get;set;}
并引入
public-Image-ImageValue{get{..}set{..}
,它将包装对fImageValue的调用并提供转换。有道理?