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
{
...
}
}