首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XmlSerializer无法找到EntityObject,即使它引用了

XmlSerializer无法找到EntityObject,即使它引用了
EN

Stack Overflow用户
提问于 2009-02-12 05:02:10
回答 4查看 1.7K关注 0票数 2

我希望有人能帮助我解决我在XmlSerializer上遇到的这个问题。

我已经浏览过这个线程:http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/551cee76-fd80-48f8-ac6b-5c22c234fecf/

我得到的错误是:

System.InvalidOperationException:无法生成临时类(result=1)。错误'System.Data.Objects.DataClasses.EntityObject‘:类型CS0012是在未引用的程序集中定义的。必须添加对程序集'System.Data.Entity,Version=3.5.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089‘的引用。

我已经确保我的单元测试有一个对System.Data.Entity的引用,所以它至少能够编译。我还在app.config中做了一个绑定到System.Data.Entity的程序集。

这是我粗略的课堂结构

代码语言:javascript
复制
[Serializable] 
[XmlRoot(Namespace = XmlSupport.MyNamespace, ElementName = XmlSupport.WantToSerialize)] 
[XmlInclude(typeof(WantToSerializeBaseClass)]
[XmlInclude(typeof(EntityObject)]
[XmlInclude(typeof(MyEntityObjectSubClass)]
public class WantToSerialize : WantToSerializeBaseClass, IXmlSerializable  (I've tried putting this on the baseclass and the current class)
{
  // methods and classes 
  // I've included XmlIncludes for all the classes that this class has a reference too
  //  even though in the WriteXml it just uses .NET base classes
}

WantToSerializeBaseClass使用了一些泛型,但是我用XmlIncludes修饰了它(EntityObject,以及它引用的任何其他类)。

呼叫代码:

代码语言:javascript
复制
var serializerWrite = new XmlSerializer(typeof (WantToSerialize), XmlSupport.ITNNamespace); 

失败

然而,如果我这样做了:

代码语言:javascript
复制
var serializerWrite = new XmlSerializer(typeof (WantToSerialize), new Type[] {typeof(EntityObject)}); 

它是成功的。

任何想法都会很有帮助。

更新了我已经追踪到WantToSerializeBaseClass中的一个方法

代码语言:javascript
复制
public abstract void ConvertFromEntity<TtoCopy>(TtoCopy toCopy) where TtoCopy : MyEntityObjectSubClass;

其中MyEntityObjectSubClass是EntityObject的子类,它在实体对象上添加了一些我想要的方法。MyEntityObjectSubClass看起来如下所示:

代码语言:javascript
复制
[Serializable]
[XmlInclude(typeof(EntityObject))]
public abstract class MyEntityObjectSubClass : EntityObject, IMyEntityObjectSubClass 

再一次,任何想法都会很棒。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-12 18:08:45

最后,我删除了通用代码,它运行得很好。

票数 0
EN

Stack Overflow用户

发布于 2009-02-12 06:52:35

如果您没有在编译时需要引用的任何代码,那么该引用将不会包含在构建的程序集中。您可以使用像反射器这样的工具来检查引用是否正在进入程序集中。

您可以尝试的一件事是向WantToSerialize中添加一个创建XmlSerializer的静态方法。包含WantToSerialize的程序集必须对EntityObject有一个很好的引用,所以这应该可以解决问题。

票数 0
EN

Stack Overflow用户

发布于 2011-05-17 19:03:02

我也有同样的问题(在VB中)。我发现您可以使用泛型参数,但是它会出错,因为MyEntityObjectSubClass类型位于另一个程序集中。如果删除对泛型参数的类型限制,它将正常工作。

我认为这是框架本身的一个错误。我已经向微软提交了一张反馈票。我附上了一个VB.net

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/540100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档