未序列化的结构列表列表。 System.RuntimeType 由于其保护级别而无法访问。只能处理公共类型

Posted

技术标签:

【中文标题】未序列化的结构列表列表。 System.RuntimeType 由于其保护级别而无法访问。只能处理公共类型【英文标题】:List of List of struct not serializing. System.RuntimeType is inaccessible due to its protection level. Only public types can be processed 【发布时间】:2015-01-15 18:53:47 【问题描述】:

我正在尝试在 XML 中序列化一个对象,以便能够在 Silverlight 中反序列化它。下面贴的是代码。

StringBuilder builder = new StringBuilder();
var serializer = new XmlSerializer(data.GetType());
var writer = XmlWriter.Create(builder);
serializer.Serialize(writer, data); //error here
string xml = builder.ToString();

代码为 data

抛出此错误
"System.RuntimeType is inaccessible due to its protection level. Only public types can be processed."

对象data其实是

 List<List<LabelValueTypeGroup>>

其中 LabelValueType 声明为

[Serializable]
[XmlRoot]
public struct LabelValueTypeGroup/* : IEnumerable*/

    public string Label  get; set; 
    public Type Type  get; set; 
    public string Value  get; set; 
    public ComparisonType? ComparisonType  get; set; 

    public IEnumerator GetEnumerator()
    
        yield return this.Label;
        yield return this.Type;
        yield return this.Value;
        yield return this.ComparisonType;
    

我做错了什么? List 是不可序列化的还是什么?为什么我这样做是因为,我想将一个对象从 WCF 传递到 Silverlight,它是由选择查询产生的,它只会选择在 xml 文件中找到的列。所以我必须创建一种可以在 Silverlight 中反序列化的动态可序列化对象。 Silverlight 项目中无法访问 javascriptserializer 和 JSON。

【问题讨论】:

【参考方案1】:

这可能是 public Type Type get; set; 字段,包含对导致错误的 RuntimeType 实例的引用。 RuntimeType 不可序列化,这是错误消息告诉您的。

【讨论】:

以上是关于未序列化的结构列表列表。 System.RuntimeType 由于其保护级别而无法访问。只能处理公共类型的主要内容,如果未能解决你的问题,请参考以下文章

状态 400 和反序列化对象列表时出错。未找到默认构造函数

增强从结构列表派生的结构的序列化

Python数据结构之列表类型(list)

Python-数据结构-列表

数据结构

Python 数据结构--序列