Тип «в сборке» не помечен как сериализуемый. linq-to-sql

#c# #sql-server #linq-to-sql #asp.net-session

#c# #sql-сервер #linq-to-sql #asp.net-session

Вопрос:

Я использую asp.net и настроили сеансы на хранение в SQL server. Мой порпроект содержит много объектов и несколько linq-to-sql dbml. Я настроил все из них на однонаправленную сериализацию, а также внес несколько индивидуальных изменений.

Когда я запускаю приложение, я продолжаю получать эту ошибку в моем обработчике событий application_error

Введите ‘Data.Karaoke.spCWP_SelUserPrivilegesResult’ в сборке ‘App_Code.thzd8p2j, Version=0.0.0.0, Culture= neutral, PublicKeyToken=null’, чтобы не помечаться как сериализуемый.

из-за ошибки я не уверен, исходит ли она из файла dbml.designer.cs, который является этим кодом:

 [Function(Name="dbo.spCWP_SelUserPrivileges")]
public ISingleResult<spCWP_SelUserPrivilegesResult> spCWP_SelUserPrivileges([Parameter(Name="IDCWPUser", DbType="Int")] System.Nullable<int> iDCWPUser)
{
  IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), iDCWPUser);
  return ((ISingleResult<spCWP_SelUserPrivilegesResult>)(result.ReturnValue));
}
  

и

 [DataContract()]
public partial class spCWP_SelUserPrivilegesResult
{

  private int _IDTypeCWPModule;

  private string _TypeKey;

  private bool _Security;

  public spCWP_SelUserPrivilegesResult()
  {
  }

  [Column(Storage="_IDTypeCWPModule", DbType="Int NOT NULL")]
  [DataMember(Order=1)]
  public int IDTypeCWPModule
  {
    get
    {
      return this._IDTypeCWPModule;
    }
    set
    {
      if ((this._IDTypeCWPModule != value))
      {
        this._IDTypeCWPModule = value;
      }
    }
  }

  [Column(Storage="_TypeKey", DbType="VarChar(10) NOT NULL", CanBeNull=false)]
  [DataMember(Order=2)]
  public string TypeKey
  {
    get
    {
      return this._TypeKey;
    }
    set
    {
      if ((this._TypeKey != value))
      {
        this._TypeKey = value;
      }
    }
  }

  [Column(Storage="_Security", DbType="Bit NOT NULL")]
  [DataMember(Order=3)]
  public bool Security
  {
    get
    {
      return this._Security;
    }
    set
    {
      if ((this._Security != value))
      {
        this._Security = value;
      }
    }
  }
}
  

Как я могу определить, откуда возникла ошибка?
Или что означает ошибка?

я не уверен, как решить или на что обратить внимание, чтобы решить проблему.

Ответ №1:

Похоже, что вы используете какой-то тип сериализации в своем приложении. Сериализация, отличная от сериализации DataContract.

Создайте новый файл и введите следующее:

 [Serializable]
public partial class spCWP_SelUserPrivilegesResult { }
  

Вы делаете это в отдельном файле на случай, если вы обновите свой dbml-файл из базы данных.

Ответ №2:

не знаю, так ли это в среде SQL Server CLR, но с .Net в общем, я бы посоветовал вам обновить ваш код до :

 [Serializable()]
[DataContract()]
public partial class spCWP_SelUserPrivilegesResult
{
    ...
  

Комментарии:

1. Я внес эти изменения, и теперь я получаю эту ошибку … Введите ‘System.Linq. EnumerableQuery`1[Данные.Сущности. msPlaylistItem]’ не может быть сериализован. Подумайте о том, чтобы пометить его атрибутом DataContractAttribute и пометить все его элементы, которые вы хотите сериализовать, атрибутом DataMemberAttribute. Смотрите документацию Microsoft .NET Framework для других поддерживаемых типов.