我有这个实体类:
public class Foo{
[Key]
[Column("ENT_ID")]
public int Id { set; get; }
.....
[NotMapped]
public virtual Employee Employee{ set; get; }
[NotMapped]
public virtual List<Car> Cars{ set; get; }
[NotMapped]
public virtual List<Book> Books{ set; get; }
public Foo()
{
Books= new List<Book>();
Cars= new List<Car>();
}
}
我想从序列化中排除虚拟属性,使用[NotMapped]工作,但我无法导航到这个属性! 我试图使用[XMLIgnore]但没有帮助。
我使用这个序列化类:
public class XmlSerializer<T> where T : class
{
public static string Serialize(T data)
{
var sw = new StringWriter();
var xmlSerializer = new XmlSerializer(typeof(T));
xmlSerializer.Serialize(sw, data);
return sw.ToString();
}
public static T Deserialize(string data)
{
var ser = new XmlSerializer(typeof(T));
var sr = new StringReader(data);
return (T)ser.Deserialize(sr);
}
}
如何从序列化中排除虚拟属性并仍然将它们用作导航属性?
答案 0 :(得分:0)
您需要在序列化之前从实体中删除生成的代理。要在没有EF生成代理的情况下获取对象,您必须禁用代理创建,然后将其转换为对象。像这样:
dbCcontext.Configuration.ProxyCreationEnabled = false;
Foo foo = dbContext.Entry(fooLoadedWithEF).CurrentValues.ToObject() as Foo;
// Do your serialization of 'foo'
不要忘记之后将ProxyCreationEnabled设置回原来的值。
这是一个不错的方法,可以在这里解答有关删除代理的问题:https://stackoverflow.com/a/25774651/31722