Xml 无法分析WCF中的列表
我无法在我的WCF终结点中接收列表 这是我的XML文件。我无法编辑此结构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: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");
}