例外スロー: 'System.Runtime.Serialization.SerializationException' をSystem.Runtime.Serialization.dll- SerializationExceptionは
にこれは私が得たエラーで、私がしようとすると、 EFを使用してDBからFKでデータを取得します。
これは私のContextクラスである:
public class Context : DbContext
{
public DbSet<TypeCar> TypeCarList { get; set; }
public DbSet<Car> CarList{ get; set; }
}
[DataContract]
public class TypeCar
{
[DataMember]
[Key]
public int TypeCarId{ get; set; }
[DataMember]
public string typeName{ get; set; }
}
[DataContract]
public class Car
{
[DataMember]
[Key]
public int CarId { get; set; }
[DataMember]
public string carName{ get; set; }
[DataMember]
public virtual TypeCar FK_Car{ get; set; }
}
これは私のIServiceインターフェイスです:
public interface IService1
{
[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "getCars",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare)]
List<Car> getCars();
[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "getTypeCars",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare)]
List<TypeCar> getTypeCars();
}
そして、これは私のサービス1クラスである:私は、REST方式getTypeCarsを呼び出すと
public class Service1 : IService1
{
public List<Avtomobil> getCars()
{
using (var db = new Context())
{
return db.CarList.ToList();
}
}
public List<TypeCar> getTypeCars()
{
using (var db = new Context())
{
return db.TypeCarList.ToList();
}
}
}
それは必要なように動作します。しかし、私がgetCarsメソッド(FK)を呼び出すと、与えられた例外(シリアライズ例外)がスローされます。私は他のエンティティと同じことを試みましたが、常に同じです(FKのエンティティが呼び出されている場合は例外です)。
EDIT: そして、私が属性FK_TypeCarから「仮想」単語を削除すると例外はスローされませんが、FK_TypeCarの値はnullです。
[Serializable]をクラスの先頭に設定しようとしましたか? –
私は、まだ同じでした。 – swdev95
@Tadej私はjsonのためにentitesを使用しません。彼らはシリアル化され、オブジェクトグラフは非常に長くなる可能性があります。代わりにDtosを使用してください。あなたの問題:私はwcfが 'FK_Car'にアクセスしようとしますが、あなたのコンテキストはすでに閉じられていると思います。前に 'FK_Car'を取り出してみてください。 – Rabban