[DataContract]
public class A : List<B>
{
[DataMember]
public double TestA { get; set; }
}
[DataContract]
public class B
{
[DataMember]
public double TestB { get; set; }
}
Z modelu powyżej próbuję serializacji następujący obiekt:Serializować obiektu, gdy obiekt dziedziczy z listy
List<A> list = new List<A>()
{
new A() { TestA = 1 },
new A() { TestA = 3 }
};
json = JsonConvert.SerializeObject(list);
//json: [[],[]]
Gdzie są moje dwie wartości od TestA
? Jest to możliwe duplikat z this thread (XML), ale chcę wiedzieć, czy nie ma opcji, aby uwzględnić te wartości, ustawiając niektóre opcje serializowania JSON? Uwaga: Tworzenie właściwości List<B>
w klasie A
zamiast dziedziczenia nie jest dla mnie opcją.
Z ciekawości, dlaczego tworzysz klasę wywodzącą się z listy? Bardzo rzadko trzeba to robić. Znacznie bardziej sensowne jest stworzenie klasy zawierającej zarówno listę, jak i podwójną zamiast rozszerzającej listę. Zobacz pytanie "Dlaczego nie odziedziczyć po liście?" (Http://stackoverflow.com/questions/21692193/why-not-inherit-from-listt) "i bardzo dobrą odpowiedź Eric Lippert. –
Okazuje się, że Json.NET nie obsługuje serializacji kolekcji jako obiektów, gdy zastosowano metodę [DataContact]. Zobacz artykuł [Deserializing 'IEnumerable' z zastosowanym '[DataContract]' nie działa] (http://stackoverflow.com/questions/35778811). –
dbc
@dbc Interesująca odpowiedź, zauważam, że mówisz * Byłaby w stanie dodać członków, jeśli twoja klasa zaimplementowała 'ICollection' *, ale lista implementuje to, błąd? –