У меня есть поток, содержащий xml в следующем формате, который я хочу десериализовать в объекты C #
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<OrganisationMetaData xmlns="urn:organisationMetaDataSchema">
<Organisations>
<Organisation>
<Code>XXX</Code>
<Name>Yyyyyy</Name>...
Я делал это много раз со строками, но в потоке он любезно добавляет атрибут пространства имен ко всем сложным элементам. Если я просто удаляю атрибут xmlns и забываю проверить его по схеме, он просто добавляет пустой атрибут xmlns. У меня проблема в том, что метод Deserialize в XmlSerializer (?) Выдает ошибку, говоря, что не ожидает атрибут. Я попытался украсить класс атрибутами XmlRoot и XmlType, но это ничего не изменило.
Вот класс, который я хочу десериализовать в
[XmlRoot(
ElementName = "OrganisationMetaData",
Namespace = "urn:organisationMetaDataSchema")]
public class OrganisationMetaData
{
public List<Organisation> Organisations { get; set; }
}
[XmlType(
TypeName = "Organisation",
Namespace = "urn:organisationMetaDataSchema")]
public class Organisation
{
public string Code {get; set;}
public string Name {get; set;}
}
Вот метод, который используется для выполнения работы
public IList<Organisation> DeserializeOrganisations(Stream stream)
{
var serializer = new XmlSerializer(typeof(OrganisationMetaData));
var mappingAssembly = //Resource in another assembly
var schemas = new XmlSchemaSet();
schemas.Add(
"urn:organisationMetaDataSchema",
XmlReader.Create(
mappingAssembly.GetManifestResourceStream(
// An xml schema
)
)
);
var settings = new XmlReaderSettings()
{
ValidationType = ValidationType.Schema,
Schemas = schemas,
ValidationFlags =
XmlSchemaValidationFlags.ReportValidationWarnings
};
settings.ValidationEventHandler += settings_ValidationEventHandler;
var reader = XmlReader.Create(stream, settings);
var metaData= (OrganisationMetaData)serializer.Deserialize(reader);
return metaData.Organisations.ToList();
}
Я пробовал это с использованием DataContractSerializer, но это дает свои собственные возможности для изучения, поэтому, если кто-то может помочь с тем, что я должен добавить в атрибуты, чтобы заставить XmlSerializer работать, было бы здорово.
Любая помощь будет оценена, спасибо.