类型不可序列化,因为它不公开?

bra*_*onb 5 c# windows-phone-7

我有一个公共类,不能正确序列化.尝试时,抛出以下异常:

数据协定类型"MyProject.MyClass"不可序列化,因为它不是公共的.将类型设置为public将修复此错误.或者,您可以将其设置为内部,并使用程序集上的InternalsVisibleToAttribute属性以启用内部成员的序列化 - 有关更多详细信息,请参阅文档.请注意,这样做会产生一定的安全隐患.

我的班级公开的,但是:

[DataContract]
public class MyClass
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    private int Count;

    public MyClass()
    {
        Name = string.Empty;
        Count = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

当课程明显公开时,为什么我会得到这个例外?

bra*_*onb 8

在Windows Phone 7应用程序中,您无法序列化私有成员:

好吧,只是碰巧WP7应用程序在"部分信任"环境中运行并且在"完全信任"之外 - DataContractSerializer拒绝序列化或反序列化非公共成员.当然这个异常被.NET内部吞噬了,所以我所看到的只是那些我所知道的事情的奇怪信息是公开的"不公开".我将所有序列化的私有字段更改为public,一切正常. http://geekswithblogs.net/mikebmcl/archive/2010/12/29/datacontractserializer-type-is-not-serializable-because-it-is-not-public.aspx

更改代码以避免序列化私有成员可以解决问题.