Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在我的类层次结构中,xml反序列化有什么问题?_C#_Xml_Deserialization - Fatal编程技术网

C# 在我的类层次结构中,xml反序列化有什么问题?

C# 在我的类层次结构中,xml反序列化有什么问题?,c#,xml,deserialization,C#,Xml,Deserialization,我正在尝试将以下xml文档反序列化为C#对象: 我的当前版本: //根目录 [XmlRoot(ElementName=“StockerFichiers”,Namespace=NamespacesConstantes.Namespace\swu repository)] 公共类StockerFicherRoot { [xmlement(ElementName=“fichiersAStocker”,Namespace=NamespacesConstantes.Namespace\u SWREPOSI

我正在尝试将以下xml文档反序列化为C#对象:

我的当前版本:

//根目录
[XmlRoot(ElementName=“StockerFichiers”,Namespace=NamespacesConstantes.Namespace\swu repository)]
公共类StockerFicherRoot
{
[xmlement(ElementName=“fichiersAStocker”,Namespace=NamespacesConstantes.Namespace\u SWREPOSITORY)]
公共FichiersAStocker FichiersAStocker{get;set;}
}
//次根
公务舱飞梭
{
[XmlArray(ElementName=“fichiersAStocker”,Namespace=NamespacesConstantes.Namespace\u SWREPOSITORY)]
[XmlArrayItem(ElementName=“FichierIdentifie”,Namespace=NamespacesConstantes.Namespace\u MSS\u TRANSPORT)]
公共列表FichiersIdentifie{get;set;}
}
公共类FichierIdentifie
{
[xmlement(Namespace=NamespacesConstantes.Namespace\u传输)]
公共字节[]Contenu{get;set;}
//所有字段都与第一个字段相似
}
并根据以下要求对副轨道等级进行变更:


//次根
公务舱飞梭
{
[xmlement(ElementName=“FichierIdentifie”,Namespace=NamespacesConstantes.Namespace\u MSS\u TRANSPORT)]
公共列表FichiersIdentifie{get;set;}
}
我还尝试删除类
FichiersAStocker
(子根),将
列表
放在根类中,有[xmlArray..]和[xmlement]两种变体,但都没有成功

我总是得到一个列表为空的对象。

尝试使用生成类。然后尝试使用该类或将其用于调试

为XML生成的代码如下所示: (您可以删除不需要的属性)


我花了半天时间才解决了这个令人沮丧的错误:

请注意“NamespacesConstantes.NAMESPACE_MSS_TRANSPORT”与“NamespacesConstantes.NAMESPACE_TRANSPORT”是如何接近的。添加一些懒惰的自动完成,您可以在“FichiersStocker”类中定义[XmlElement…]时欺骗自己


谢谢你的帮助,马特,我在粘贴一些代码时注意到了这个错误!:)

谢谢你的快速回答!问题是我们可以有多个
FichierIdentifie
。根据XML2CSharp的说法,FichiersAStocker类实际上没有太大变化(它给了我与我的主要帖子中的“变体”相同的信息),但是,它没有改变任何东西,我的列表没有填充。知道为什么吗?这就是您正在使用的完整XML吗?您可以包含一个用于填充值的代码吗?是的,它是我用于测试的整个xml,我没有访问提供xml的Web服务的权限:/但是无论xml是以何种方式生成的,它都不应该改变我应该能够反序列化它的内容,没有?我不能给你完整的工作内容,因为这是一个庞大的WCF解决方案的一部分,但“我会尽力给你你需要的!”DJust尝试使用XML作为字符串变量提取反序列化代码的一部分。

<ns1:StockerFichiers
    xmlns:ns1="http://www.foo.fr/bar/Repository"
    xmlns:ns0="http://www.foo.fr/bar/Transport/">
    <ns1:fichiersAStocker>
        <ns0:FichierIdentifie>
            <ns0:Contenu></ns0:Contenu>
            <ns0:DomaineIdLocalDoc>128</ns0:DomaineIdLocalDoc>
            <ns0:EstOriginal>true</ns0:EstOriginal>
            <ns0:IdLocalDoc>2018-07-06T154554_70183_2</ns0:IdLocalDoc>
            <ns0:PieceDynamique>false</ns0:PieceDynamique>
            <ns0:GoldenSource>false</ns0:GoldenSource>
            <ns0:TypeDoc>PDF</ns0:TypeDoc>
            <ns0:TypeMime>application/pdf</ns0:TypeMime>
        </ns0:FichierIdentifie>
    </ns1:fichiersAStocker>
</ns1:StockerFichiers>


public void StockerFichiersXmlBase64(string fichiersAStocker)
        {

            //serializer 
            XmlRootAttribute xroot = new XmlRootAttribute();
            xroot.ElementName = "StockerFichiers";
            xroot.Namespace = NamespacesConstantes.NAMESPACE_SWREPOSITORY; //ns1
            XmlSerializer deserializer = new XmlSerializer(typeof(StockerFichiersRoot),xroot );

            //fichiersAStocker is base64 encoded
            byte[] data = Convert.FromBase64String(fichiersAStocker);
            StringReader stringReader = new StringReader(Encoding.UTF8.GetString(data));

            //deserialization
            StockerFichiersRoot deserializedFiles = (StockerFichiersRoot)deserializer.Deserialize(stringReader);      
        }

   /* 
Licensed under the Apache License, Version 2.0

http://www.apache.org/licenses/LICENSE-2.0
*/
using System;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace Xml2CSharp
{
[XmlRoot(ElementName="FichierIdentifie",  Namespace="http://www.foo.fr/bar/Transport/")]
    public class FichierIdentifie {
    [XmlElement(ElementName="Contenu", Namespace="http://www.foo.fr/bar/Transport/")]
    public string Contenu { get; set; }
    [XmlElement(ElementName="DomaineIdLocalDoc", Namespace="http://www.foo.fr/bar/Transport/")]
    public string DomaineIdLocalDoc { get; set; }
    [XmlElement(ElementName="EstOriginal", Namespace="http://www.foo.fr/bar/Transport/")]
    public string EstOriginal { get; set; }
    [XmlElement(ElementName="IdLocalDoc", Namespace="http://www.foo.fr/bar/Transport/")]
    public string IdLocalDoc { get; set; }
    [XmlElement(ElementName="PieceDynamique", Namespace="http://www.foo.fr/bar/Transport/")]
    public string PieceDynamique { get; set; }
    [XmlElement(ElementName="SisraGoldenSource", Namespace="http://www.foo.fr/bar/Transport/")]
    public string SisraGoldenSource { get; set; }
    [XmlElement(ElementName="TypeDocSisra", Namespace="http://www.foo.fr/bar/Transport/")]
    public string TypeDocSisra { get; set; }
    [XmlElement(ElementName="TypeMime", Namespace="http://www.foo.fr/bar/Transport/")]
    public string TypeMime { get; set; }
}

[XmlRoot(ElementName="fichiersAStocker", Namespace="http://www.foo.fr/bar/Repository")]
public class FichiersAStocker {
    [XmlElement(ElementName="FichierIdentifie", Namespace="http://www.foo.fr/bar/Transport/")]
    public FichierIdentifie FichierIdentifie { get; set; }
}

[XmlRoot(ElementName="StockerFichiers", Namespace="http://www.foo.fr/bar/Repository")]
public class StockerFichiers {
    [XmlElement(ElementName="fichiersAStocker", Namespace="http://www.foo.fr/bar/Repository")]
    public FichiersAStocker FichiersAStocker { get; set; }
    [XmlAttribute(AttributeName="ns1", Namespace="http://www.w3.org/2000/xmlns/")]
    public string Ns1 { get; set; }
    [XmlAttribute(AttributeName="ns0", Namespace="http://www.w3.org/2000/xmlns/")]
    public string Ns0 { get; set; }
}

}