Ich verwende .NET Core 1.1 und eine Konsolenanwendung zu schreiben. Ich muss ein Objekt mit einigen grundlegenden Eigenschaften von Strings und int sowie einigen IEnumerable Objects serialisieren und es als XML serialisieren, damit ich es in einer Datei "data.xml" speichern kann..Net Core Serialisieren Sie ein Objekt mit IEnumerables <T>, um als XML zu speichern
Ich erhalte die Ausnahme: System.Runtime.Serialization.SerializationException: 'Typ' System.Collections.Generic.List`1 [[CorpsDataExtractor.ViewModels.LegacyView, CorpsDataExtractor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null]] 'mit Datenvertragsname' ArrayOfLegacyView: http://schemas.datacontract.org/2004/07/CorpsDataExtractor.ViewModels 'wird nicht erwartet. Fügen Sie statische Typen, die der Liste bekannter Typen nicht bekannt sind, hinzu, z. B. indem Sie das KnownTypeAttribute-Attribut verwenden oder indem Sie sie der Liste bekannter Typen hinzufügen, die an DataContractSerializer übergeben werden.
Ich bin derzeit in der Lage, mein Objekt als JSON zu serialisieren, habe aber Probleme mit dem DataContractSerializer. Ich habe die Liste bekannter Typen hinzugefügt, für die der Ausnahmezustand fehlt, der jedoch fehlschlägt.
// This List isretrieved using Entity Framework Core
List<LegacyView> legacyData = await _corpsRepo.ListLegacyData();
// The Below Line will write to a JSON File. No Error and works
File.WriteAllText(@"E:\\CorporationsDataLegacy.json", JsonConvert.SerializeObject(legacyData));
// This Creates a Known Type List for the DataContractSerializer
var knownTypeList = new List<Type>
{
typeof(LegacyView),
typeof(People),
typeof(DocumentType)
};
FileStream writer = new FileStream(@"E:\\data.xml", FileMode.Create);
var ser = new DataContractSerializer(typeof(LegacyView), knownTypeList);
// When Debugging I Receive The stated exception at this line
ser.WriteObject(writer, legacyData);
sind unten meine Klasse Viewmodels:
Legacy-Ansicht
[DataContract]
public class LegacyView
{
[DataMember]
public string Ubi { get; set; }
[DataMember]
public IEnumerable<Person> People{ get; set; }
[DataMember]
public IEnumerable<DocumentType> DocumentTypes { get; set; }
}
Person
[DataContract]
public class Person
{
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string MiddleName { get; set; }
}
Dokumente
[DataContract]
public class DocumentType
{
[DataMember]
public string Document { get; set; }
[DataMember]
public DateTime? CompletedDate { get; set; }
}
Irgendwelche Richtung auf was ich vermisse?
Haben Sie versucht, 'typeof (IEnumerable) hinzuzufügen, typeof (IEnumerable )' zu den bekannten Typen? –
Gusman
@Gusman, mit einer Kombination aus Ihrer Antwort und Antwort funktionierte, verließ ich meine Eigenschaften als IEnumerable, aber wo ich meine KnownType-Liste deklarierte ich musste diese Beton mit Hilfe der Liste –
CodeSurvivor
Glad Sie haben es funktioniert. Fügen Sie Ihre Lösung als Antwort hinzu, da dies anderen mit Ihrem Problem helfen kann. – Gusman