[英]Error serializing view model: “Type 'System.Web.HttpPostedFileWrapper' cannot be serialized.”
[英]DataContract runtime error - Type 'myType' cannot be serialized. What i'm doing wrong?
试图传递“复杂”类类型,该类类型包含具有接口的原始类型以及接口/类的列表。
我猜有问题的成员是:
public List<IMyInterface> IntrfList
运行时错误:
收到对http:/localhost/xxxxxx/xxxxxService.svc的HTTP响应时发生错误。 这可能是由于服务端点绑定未使用HTTP协议。 这也可能是由于服务器终止了HTTP请求上下文(可能是由于服务关闭了)。 有关更多详细信息,请参见服务器日志。
来自MS Service跟踪查看器(SvcTraceViewer)的描述性错误:
类型“ myType”无法序列化。 考虑使用DataContractAttribute属性标记它,并使用DataMemberAttribute属性标记要序列化的所有成员。 如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记。 有关其他受支持的类型,请参见Microsoft .NET Framework文档。
我按照解释的建议做了,但是没有帮助。
“共享”类:
[System.Runtime.Serialization.DataContract]
public class ServerState
{
private Queue<IJob> _mWaitingQueue;
public Queue<IJob> mWaitingQueue
{
get
{
lock (_LockObjWaiting)
{
return _mWaitingQueue;
}
}
private set
{
_mWaitingQueue = value;
}
}
private object _LockObjWaiting = new object();
private List<IJob> _mInPrograssList = new List<IJob>();
[DataMember]
public List<IJob> mInPrograssList
{
get
{
return _mInPrograssList;
}
private set
{
_mInPrograssList = value;
}
}
}
IJob是一个接口。 IJob的结构如下:
IJob (Interface)
- JobBase (Abstract class)
- JobA (Driven from JobBase)
- JobB (Driven from JobBase)
好吧,知道了!
我将解决方案发布在了我的博客中: http : //livshitz.wordpress.com/2012/11/06/wcf-serialization-datacontract-runtime-error-type-mytype-cannot-be-serialized/
在与“共享”班级的所有可能组成部分进行战斗和削减之后,我进入了有问题的领域。
问题是我将interface用作与Driven类相关联的成员(或..的列表)。
就是这样! 序列化器在弄清楚如何序列化该成员时遇到问题,因此这是解决方案:
当使用interface作为要通过WCF进行序列化和共享的类的成员(或接口列表)时, Shared类必须通过添加接口来指定接口的可能类型:
[System.Runtime.Serialization.KnownType(typeof(JobA))]
[System.Runtime.Serialization.KnownType(typeof(JobB))]
并且每种类型都必须标记为:
[System.Runtime.Serialization.DataContract]
注意:由于JobBase是抽象的,因此没有理由用KnownType对其进行标记...
而已。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.