我有這個接口和類(你可以看看here看到所有相關的代碼是可編譯的)。我想只爲了說明問題(非編譯代碼)提供最少的代碼:BinaryFormatter不反序列化IEnumerable上的對象
interface IViz<T> : ISerializable {
IEnumerable<SelectedValue> SelectedValues { get; }
};
[Serializable]
abstract class GroupViz<T, TIn, TOut> : IViz<T> {
public IEnumerable<SelectedValue> SelectedValues
{
get { return selectedValues.Cast<SelectedValue>(); }
}
}
[Serializable]
public class EntityValueGroupViz<TEntity, TKey> : ValueGroupViz<TEntity, TKey>
在第一界面(IViz
)我已經聲明,其中存儲在每個SelectedValue
對象的屬性IEnumerable<SelectedValue> SelectedValues
。
SelectedValue
有兩種實現方式(通用和非通用的):
[Serializable]
public abstract class SelectedValue : ISerializable
{
public SelectedValue(SerializationInfo info, StreamingContext context)
{
Configuration.SerializationTemplatesEnum serializationTemplateEnum = (Configuration.SerializationTemplatesEnum)context.Context;
foreach (SerializationEntry entry in info)
{
switch (serializationTemplateEnum)
{
case Configuration.SerializationTemplatesEnum.QUERY:
switch (entry.Name)
{
case "Value":
Value = entry.Value;
break;
case "Operator":
Operator = (VizOperatorEnum)entry.Value;
break;
}
break;
case Configuration.SerializationTemplatesEnum.TEMPLATE:
break;
}
}
}
}
[Serializable]
public class SelectedValue<T> : SelectedValue, ISerializable
{
public SelectedValue(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}
以它們序列化我使用BinaryFormatter
,他們(上IViz.SelectValues
財產SelectedValue
對象)上連載文件。
但是,當我試圖反序列化它們時,它們沒有加載。我在SelectedValue(SerializationInfo info, StreamingContext context)
構造函數上添加了一個斷點,但未達到。
我也試着在IViz.SelectedValues
屬性上添加一個實現,我也嘗試將該屬性設置爲IList
而不是IEnumerable
。但結果是一樣的:我的SelectedValue
對象沒有反序列化。
任何想法?
感謝您的意見。我試着添加每個最小的de /序列化相關代碼,以便能夠適合您的請求。它在[this](https://dotnetfiddle.net/bPYdJU)上。 – Jordi
好吧,如何反序列化'EntityValueGroupViz'中的'SelectedValues'有問題,但是[你的小提琴](https://dotnetfiddle.net/bPYdJU)中的測試代碼不會構造和存儲這種類型的實例它構造了一個'EntityQueryContext'的實例。在基類中似乎有一個'IList > vizs',但它不是公有的,也不會被填充。 –
dbc
謝謝。據我所知,你提出反序列化是有效的,但是我沒有在任何地方達到我的'vizs'的內容(我認爲這可能是一種代碼錯寫)。我想建議詢問爲什麼在序列化時到達SelectedValue.GetObjectData()時爲什麼在反序列化時到達了SelectedValue(SerializationInfo info,StreamingContext context)構造函數。我希望我解釋得很好。 – Jordi