【问题标题】:Exclude virtual property from being serialized in EF6排除虚拟属性在 EF6 中被序列化
【发布时间】:2018-04-18 11:54:00
【问题描述】:

我有这个实体类:

 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);
        }
    }

如何从序列化中排除虚拟属性并仍然将它们用作导航属性?

【问题讨论】:

    标签: entity-framework serialization


    【解决方案1】:

    您需要在序列化之前从实体中删除生成的代理。要在没有 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

    【讨论】:

    • 谢谢蒂米,它对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2013-08-20
    • 2016-07-25
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    相关资源
    最近更新 更多