【发布时间】:2017-11-26 15:31:16
【问题描述】:
我有 2 节课:
[XmlInclude(typeof(Item))]
public class A
{
public int Id { get; set; }
[XmlArray("Items")]
[XmlArrayItem("Item")]
public virtual List<Item> Items { get; set; } = new List<Item>();
}
public class Item
{
public int Id { get; set; }
[XmlIgnore]
public virtual A a { get; set; }
}
我在我的DbContext 中使用这个方法:
public virtual DbSet<A> A { get; set; }
public IQueryable<A> GetA()
{
return A;
}
现在我想将数据导出到 XML:
Type[] types = { typeof(Item) };
var aElements = GetA().ToList();
System.Xml.Serialization.XmlSerializer writer =
new System.Xml.Serialization.XmlSerializer(aElements.GetType(), types);
writer.Serialize(file, aElements);
它会抛出一个错误:
InvalidOperationException:类型 System.Data.Entity.DynamicProxies.A_08D7BCCB892E27DE8C32342A0E8F0F2B2D3B9E2DAC9F6A16 不是预期的。使用 XmlInclude 或 SoapInclude 属性指定静态未知的类型。
怎么了?我尝试搜索类似的主题,但这些解决方案对我不起作用。
编辑:预期结果:
<A>
<Id>1</Id>
<Items>
<Item><Id>20</Id></Item>
</Items>
</A>
<A>
..
</A>
【问题讨论】:
-
看起来不错。没有错误。是否还有其他您未提供的详细信息?
-
几乎所有内容,只是那些类有更多属性,但只是原始类型
标签: c# entity-framework xml-serialization