C# 如何序列化静态类的非静态子类

C# 如何序列化静态类的非静态子类,c#,serialization,static-classes,C#,Serialization,Static Classes,我想序列化一个非常普通的类,但关键是它嵌套在一个静态类中,如下所示: public static class StaticClass { [Serializable] public class SomeType { ... } } 此代码: StaticClass.SomeType obj = new StaticClass.SomeType(); XmlSerializer mySerializer = new XmlSerializer(ty

我想序列化一个非常普通的类,但关键是它嵌套在一个静态类中,如下所示:

public static class StaticClass
{
    [Serializable]
    public class SomeType
    {
        ...
    }
}
此代码:

StaticClass.SomeType obj = new StaticClass.SomeType();
XmlSerializer mySerializer = new XmlSerializer(typeof(obj));
产生以下错误:

StaticClass.SomeType cannot be serialized. Static types cannot be used as parameters or return types.
这个错误似乎完全无关<代码>静态类。SomeType不是静态类型


有办法解决这个问题吗?认为这个错误是愚蠢的吗?< /P> < P>要么使类不嵌套,要么考虑使用它。 解决方法是使用(DataContractAttribute+DataMemberAttribute)


正如您所看到的,DataContractSerializer甚至不要求
StaticClass
是公共的。一个区别是,您应该使用
WriteObject'和
ReadObject'来代替
序列化
反序列化
作为一种实用的解决方法-不要标记嵌套类型
静态

public class ContainerClass
{
    private ContainerClass() { // hide the public ctor
        throw new InvalidOperationException("no you don't");
    }

    public class SomeType
    {
        ...
    }
}

顺便说一句,
[Serializable]
没有在这里添加任何内容-
XmlSerializer
没有使用它。已经有关于Connect的报告:作为XmlSerializer限制的解决方法,这对我来说是最实际的。谢谢:)+1简单有效。如果我要这样做的话,我也会将这个类标记为密封的。让我想起了旧的.NET 1天(密封类和私有构造函数)
public class ContainerClass
{
    private ContainerClass() { // hide the public ctor
        throw new InvalidOperationException("no you don't");
    }

    public class SomeType
    {
        ...
    }
}