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

时间:2014-11-18 14:34:07

标签: c# wcf silverlight serialization xmlserializer

我正在尝试用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();

代码为数据

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

对象数据实际上是

 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,这是一个select查询产生的,它只会选择在xml文件中找到的列。所以我必须创建一种动态的可序列化对象,它可以在Silverlight中反序列化。在Silverlight项目中无法访问Javascriptserializer和JSON。

1 个答案:

答案 0 :(得分:4)

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