utilizadas uso significa que palabras c# serialization static-classes

c# - uso - Cómo serializar clase secundaria no estática de clase estática



static c# (3)

Como solución alternativa pragmática: no marque el tipo de anidamiento static :

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

Quiero serializar una clase bastante ordinaria, pero la trampa está anidada en una clase estática como esta:

public static class StaticClass { [Serializable] public class SomeType { ... } }

Este código:

StaticClass.SomeType obj = new StaticClass.SomeType(); XmlSerializer mySerializer = new XmlSerializer(typeof(obj));

Produce este error:

StaticClass.SomeType cannot be serialized. Static types cannot be used as parameters or return types.

Ese error parece completamente irrelevante; StaticClass.SomeType no es un tipo estático.

¿Hay alguna forma de evitar esto? ¿Me equivoco al pensar que este error es tonto?



Se conoce la limitación en XmlSerializer ()

Y la solución es usar DataContractSerializer (DataContractAttribute + DataMemberAttribute)

var ser = new DataContractSerializer(typeof (StaticClass.SomeType)); var obj = new StaticClass.SomeType {Int = 2}; ser.WriteObject(stream, obj); ... static class StaticClass { [DataContract] public class SomeType { [DataMember] public int Int { get; set; } } }

Como puede ver, DataContractSerializer ni siquiera requiere que StaticClass sea ​​público. Una diferencia es que debe usar WriteObject'' and ReadObject'' en lugar de Serialize y Deserialize