Bry*_*yan 5 .net c# xml-serialization
我试图从svcutil序列化/反序列化生成的WCF Web服务代理代码.虽然我能够序列化对象,但我无法将它们反序列化回对象.这是我通过序列化生成的XML:
<RootObject xmlns="http://schemas.myco.com/online/sync/2008/11">
<WrapperObject>
<Objects>
<SomeObject p4:type="Foo" ContextId="d5f9f021-b2a1-47ba-9f25-1e068194dc87" ObjectId="fad3ef87-3944-459d-b45b-1e4e52ef24db" xmlns:p4="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.myco.com/online/sync/2008/11" />
</Objects>
</WrapperObject>
</RootObject>
Run Code Online (Sandbox Code Playgroud)
我有几个问题:
我已经在使用XmlSerializerNamespaces来声明命名空间以匹配生成的代理代码中指定的命名空间.为什么还有一个"p4"标签,它添加到"SomeObject"标签并添加了一个新的xml命名空间(xmlns:p4 ="http://www.w3.org/2001/XMLSchema-instance").
using (XmlWriter xmlWriter = XmlWriter.Create(stringBuilder, xmlSettings))
{
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, defaultNamespace);
XmlSerializer serializer = new XmlSerializer(typeof(T), defaultNamespace);
serializer.Serialize(xmlWriter, objectToBeSerialized, namespaces);
return stringBuilder.ToString();
}
Run Code Online (Sandbox Code Playgroud)当我尝试使用以下代码反序列化XML时,我收到以下错误:"System.InvalidOperationException:生成XML文档时出错.---> System.Xml.XmlException:'p4:type'是重复的属性名称."
using (TextReader textReader = new StringReader(xmlString))
{
using (XmlReader xmlReader = XmlReader.Create(textReader))
{
XmlSerializer serializer = new XmlSerializer(typeof(T), defaultNamespace);
return (T)serializer.Deserialize(xmlReader);
}
}
Run Code Online (Sandbox Code Playgroud)代理代码由svcutil生成,以与WCF Web服务进行通信.当我使用Web服务调用时,所有生成的对象都被正确地序列化/反序列化.
以前有没有人有类似的问题?
WCF 使用专门的 XML 序列化程序来序列化对象,这将生成与标准 XmlSerializer 不同的 XML。您可以使用 XmlSerializer,但您必须为对象 objectToBeSerialized 正确指定您的类的属性。使用 WCF 序列化程序可能会更好。
看看这篇文章:
http://msdn.microsoft.com/en-us/magazine/cc163569.aspx
| 归档时间: |
|
| 查看次数: |
1783 次 |
| 最近记录: |