Вы столкнулись с одним из DataContractSerializer
ошибок.
Исправлено: Измените объявление личного участника на:
[DataMember]
private List<Person> members = new List<Person>();
ИЛИ измените свойство на:
[DataMember()]
public IList<Person> Feedback {
get { return m_Feedback; }
set {
if ((value != null)) {
m_Feedback = new List<Person>(value);
} else {
m_Feedback = new List<Person>();
}
}
}
И это будет работать. Ошибка Microsoft Connect здесь
Эта проблема возникает, когда вы десериализуете объект с IList<T>
DataMember, а затем снова пытаетесь сериализовать тот же экземпляр.
Если вы хотите увидеть что-то классное:
using System;
using System.Collections.Generic;
class TestArrayAncestry
{
static void Main(string[] args)
{
int[] values = new[] { 1, 2, 3 };
Console.WriteLine("int[] is IList<int>: {0}", values is IList<int>);
}
}
Будет напечатано int[] is IList<int>: True
.
Я подозреваю, что это, возможно, причина, по которой вы видите, что он возвращается как массив после десериализации, но это не интуитивно понятно.
Если вы вызываете метод Add () для IList<int>
массива, он выдает NotSupportedException
.
Одна из этих причуд .NET.