Если вы объявите свой тип следующим образом, сериализация работает нормально:
[DataContract]
public class AccountData
{
[DataMember]
public object accNumber1 {get; set;}
[DataMember]
public int[] accNumber2 { get; set; }
[DataMember]
public List<int> accNumber3 { get; set; }
[DataMember]
public ArrayList accNumber4 {get; set;}
}
(я рекомендую использовать свойства вместо открытых полей.)
Вам действительно нужно, чтобы ваши поля имели тип объекта? Если приведенный выше класс слишком ограничен, есть способы сделать его более гибким, но, возможно, не таким гибким, как вы предполагали.
Также обратите внимание, что атрибут KnownType
применяется ко всему классу, а не к отдельным свойствам.