不能从DataContractSerializer反序列化列表

本文关键字:列表 反序列化 DataContractSerializer 不能 | 更新日期: 2023-09-27 18:10:17

我在c#上,我有麻烦从一个XML文件中反序列化列表,我使用DataContractSerializer创建了一个来自实体框架的实体列表,我使用的代码是这样的:

List<Proveedores> proveedores = ObtenerEntidadesProveedores();
foreach (Proveedores proveedor in proveedores)
{
    proveedor.ProveedoresDomicilios.Load();
}
Type[] tipoColeccion = new Type[1];
tipoColeccion[0] = typeof(Proveedores);
DataContractSerializer serializador = new DataContractSerializer(typeof(List<Proveedores>), tipoColeccion);
serializador.WriteObject(entrada, proveedores);
salida = entrada;

我使用DataContractSerializer,因为它将把所有相关的实体从provedores映射到XML。

现在的问题是,当我试图取回它时,我得到一个只有一个元素的List:

List<Proveedores> proveedores = new List<Proveedores>();
Type[] tipoColeccion = new Type[1];
tipoColeccion[0] = typeof(Proveedores);
DataContractSerializer serializador = new DataContractSerializer(typeof(List<Proveedores>), tipoColeccion);
proveedores = serializador.ReadObject(entrada) as List<Proveedores>;

当生成的XML有很多这样的字符时:

<ArrayOfProveedores xmlns="http://schemas.datacontract.org/2004/07/MxPOS10.Sistema.Datos" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <Proveedores z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
        <EntityKey z:Id="i2" xmlns="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses" xmlns:a="http://schemas.datacontract.org/2004/07/System.Data">
            <a:EntityContainerName>MxPOSv10r1Entidades</a:EntityContainerName>
                <a:EntityKeyValues>
                    <a:EntityKeyMember>
                        <a:Key>IDProveedor</a:Key>
                        <a:Value i:type="b:int" xmlns:b="http://www.w3.org/2001/XMLSchema">0</a:Value>
                    </a:EntityKeyMember>
                </a:EntityKeyValues>
            <a:EntitySetName>Proveedores</a:EntitySetName>
        </EntityKey>
        <Compras/>
        <Dumb i:nil="true"/>
        <IDProveedor>0</IDProveedor>
        <Nombre>PANADERIAS DEL CENTRO</Nombre>
        <ProveedoresContacto/>
        <ProveedoresDomicilios/>
        <RFC>98982u24ujjjj</RFC>
        <RegistroActivo>false</RegistroActivo>
    </Proveedores>
    <.... more Proveedores ....>
</ArrayOfProveedores>

有什么建议吗?

不能从DataContractSerializer反序列化列表

无论序列化到什么对象,都要这样设置。它的作用是,与元素Proveedore(s)

设置一个collectiondata契约
    [DataContract(Name = "Proveedore", Namespace = "")]
    public class Proveedores {
    }
    [CollectionDataContract(Name = "ArrayOfProveedores", ItemName = "Proveedore", Namespace = "")]
    public class ProveedoresList : List<Proveedores> {
    }
    public class FileRead{
        [DataMember(Name = "ArrayOfProveedores", Order = 0)]
        public ProveedoresList Pros { get; private set; }
    }