How to serialize non-static child class of static class

前端 未结 3 1593
-上瘾入骨i
-上瘾入骨i 2021-01-04 12:10

I want to serialize a pretty ordinary class, but the catch is it\'s nested in a static class like this:

public static class StaticClass
{
    [Serializable]
         


        
相关标签:
3条回答
  • 2021-01-04 12:36

    Either make the class non nested or consider using the DataContractSerializer instead.

    0 讨论(0)
  • 2021-01-04 12:45

    As a pragmatic workaround - don't mark the nesting type static:

    public class ContainerClass
    {
        private ContainerClass() { // hide the public ctor
            throw new InvalidOperationException("no you don't");
        }
    
        public class SomeType
        {
            ...
        }
    }
    
    0 讨论(0)
  • 2021-01-04 13:03

    It's know limitation in XmlSerializer ()

    And workaround is to use 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; }
        }
    }
    

    As you can see DataContractSerializer doesn't even require StaticClass to be public. One difference is that you should use WriteObject' andReadObject' instead Serialize and Deserialize

    0 讨论(0)
提交回复
热议问题