Вот непроверенный теневой обходной путь, который я склонен использовать в принципе:
private IList<Class2> myArray;
[XmlIgnore]
public IList<Class2> MyArray
{
get { return myArray; }
set { myArray = value; }
}
[XmlElement("MyArray")]
public object MyArraySerializable
{
get { return MyArray; }
set { MyArray = value as IList<Class2>; }
}
Это будет сериализовать любой список, который вы можете использовать, как общий объект с атрибутом типа, который сообщит десериализатору фактический типобъект, поэтому, когда этот объект десериализован, он должен быть снова приведен к IList<Class2>
.Не забудьте предоставить любые типы, которые могут быть приняты интерфейсом.
Я не вижу причин, по которым какой-либо сериализатор не сможет сериализовать такие свойства.Это не то, что вы на самом деле пытаетесь сериализовать интерфейс, вы пытаетесь сериализовать объект, который реализует определенный интерфейс (который не сильно отличается от абстрактного подкласса, некоторые языки программирования даже работают исключительно на интерфейсах).
Когдасериализатор должен сериализовать этот объект он знает , что объект реализует этот интерфейс, все, что ему действительно нужно, это сериализовать его и присоединить атрибут типа (как это происходит, если вы сериализуете абстрактные классы или просто суперклассы вgeneral).
Теперь десериализатор просматривает тип и может проверить , действительно ли этот объект реализует требуемый интерфейс, а затем десериализовать его в соответствующее свойство.