Search code examples
c#serializationstatic-classes

How to serialize non-static child class of static class


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]
    public class SomeType
    {
        ...
    }
}

This code:

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

Produces this error:

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

That error seems completely irrelevant; StaticClass.SomeType is not a static type.

Is there a way around this? Am I wrong to think this error is dumb?


Solution

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