簡體   English   中英

DataContract運行時錯誤-類型'myType'無法序列化。 我做錯了什么?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM