[英]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.