Xml 无法分析WCF中的列表

Xml 无法分析WCF中的列表,xml,wcf,Xml,Wcf,我无法在我的WCF终结点中接收列表 这是我的XML文件。我无法编辑此结构 <wcf:Carro> <wcf:Fabricante> <wcf:Fabricante> <wcf:Id> <wcf:Id>0001</wcf:Id> </wcf:Gid> </wcf:Fabricante> <wcf:Ace

我无法在我的WCF终结点中接收列表

这是我的XML文件。我无法编辑此结构

<wcf:Carro>
   <wcf:Fabricante>
      <wcf:Fabricante>
         <wcf:Id>
            <wcf:Id>0001</wcf:Id>
         </wcf:Gid>
      </wcf:Fabricante>
   <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
</wcf:Carro>
我收到了关于Fabricante的信息,但是“Acessorio”的列表没有

我做错了什么

编辑:我做了一些调整


注意:如果我包括一个新节点wcf:Acessorio,并在该节点内放置其他节点wcf:Acessorio,则该节点可以工作。但是我无法更改XML结构。

您无法使用DataContract序列化程序读取XML负载

首先,切换WCF服务以使用:

[服务合同]
[XmlSerializerFormat]
公共类WCF服务
{
[经营合同]
公共无效操作(Carro Carro)
{
//做你需要做的事
}
}
现在使用一个datacontract,它使用XmlAttributes来控制其:

[XmlRoot(ElementName=“Carro”,Namespace=“wcf”)]
公共级卡罗
{
[XmlElement]
公共制作者制作者{get;set;}
[XmlElement]
公共列表Acessorio{get;set;}
}
为了验证该类是否有效,我在LinqPad中使用了以下试验台:

    var xml=@"<wcf:Carro xmlns:wcf=""wcf"">
      <wcf:Fabricante>
         <wcf:Id>0001</wcf:Id>
      </wcf:Fabricante>
   <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
</wcf:Carro>";

var obj = new Carro { 
    Fabricante = new Fabricante { Id ="0001"},
    Acessorio =  new List<Acessorio> { 
           new Acessorio{ Descrição = "1"}, 
           new Acessorio{ Descrição = "2"} } 
    };

var xs = new XmlSerializer(typeof(Carro));
using(var ms = new MemoryStream())
{
  using(var xw = XmlWriter.Create(ms, new XmlWriterSettings {Indent = true, OmitXmlDeclaration = true}))
   xs.Serialize(xw, obj);
  Encoding.UTF8.GetString(ms.ToArray()).Dump("serialized result");

  var o = (Carro) xs.Deserialize(XmlReader.Create(new StringReader(xml)));
  o.Dump("deserialized result");
}
var xml=@”
0001
试验
试验
试验
试验
试验
试验
试验
";
var obj=新的Carro{
Fabricante=新的Fabricante{Id=“0001”},
Acessorio=新列表{
新教授{descripção=“1”},
新教授{descripção=“2”}
};
var xs=新的XmlSerializer(typeof(Carro));
使用(var ms=new MemoryStream())
{
使用(var xw=XmlWriter.Create(ms,新的XmlWriterSettings{Indent=true,ommitxmlsdeclaration=true}))
序列化(xw,obj);
Encoding.UTF8.GetString(ms.ToArray()).Dump(“序列化结果”);
var o=(Carro)xs.Deserialize(XmlReader.Create(newstringreader(xml));
o、 转储(“反序列化结果”);
}
其中,序列化结果的结果为:


0001
1.
2.

这与我们预期的输入相匹配。

也许这是有用的:@rene关于标记Fabricante,这是复制/粘贴错误。我包含了xml名称空间,但仍然不起作用。还有其他建议吗?一个重要的信息:如果我添加了一个名为的新标签,并在这个标签内放置了其他标签。但是我不能改变XML结构,我怀疑如果列表本身不在容器中,您是否能够反序列化列表,正如您自己的测试所示。最糟糕的情况是,您必须使用消息实例自己读取xml:您介意分享您正在使用的实际场景吗?
    var xml=@"<wcf:Carro xmlns:wcf=""wcf"">
      <wcf:Fabricante>
         <wcf:Id>0001</wcf:Id>
      </wcf:Fabricante>
   <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
      <wcf:Acessorio>
      <wcf:Descrição>Test</wcf:Descrição>
   </wcf:Acessorio>
</wcf:Carro>";

var obj = new Carro { 
    Fabricante = new Fabricante { Id ="0001"},
    Acessorio =  new List<Acessorio> { 
           new Acessorio{ Descrição = "1"}, 
           new Acessorio{ Descrição = "2"} } 
    };

var xs = new XmlSerializer(typeof(Carro));
using(var ms = new MemoryStream())
{
  using(var xw = XmlWriter.Create(ms, new XmlWriterSettings {Indent = true, OmitXmlDeclaration = true}))
   xs.Serialize(xw, obj);
  Encoding.UTF8.GetString(ms.ToArray()).Dump("serialized result");

  var o = (Carro) xs.Deserialize(XmlReader.Create(new StringReader(xml)));
  o.Dump("deserialized result");
}