为WCF服务反序列化C#中的简单XML数组对象
三天来我一直面临着同样的问题,我不知道我做错了什么 上下文:我正在为固定XML创建一个新的WCF服务 问题:看起来XML的反序列化出错了。我确实得到了为WCF服务反序列化C#中的简单XML数组对象,c#,xml,wcf,xsd,deserialization,C#,Xml,Wcf,Xsd,Deserialization,三天来我一直面临着同样的问题,我不知道我做错了什么 上下文:我正在为固定XML创建一个新的WCF服务 问题:看起来XML的反序列化出错了。我确实得到了数据对象,但没有填充属性项 迄今为止: 使用XSD4.0(目前在WCF项目中使用)和4.7创建C#类 添加多个属性,如: [ServiceContract(Namespace = "urn:oasis:names:tc:SPML:2:0"), XmlSerializerFormat]. [System.Xml.Serialization.XmlA
数据
对象,但没有填充属性项
迄今为止:
- 使用XSD4.0(目前在WCF项目中使用)和4.7创建C#类
- 添加多个属性,如:
到[ServiceContract(Namespace = "urn:oasis:names:tc:SPML:2:0"), XmlSerializerFormat]. [System.Xml.Serialization.XmlArrayItemAttribute("attr", IsNullable = false)]
属性项
<spml:data xmlns:spml="urn:oasis:names:tc:SPML:2:0">
<attr name="mailone" xmlns="urn:oasis:names:tc:DSML:2:0:core">
<value>xxxx@gmail.com</value>
</attr>
<attr name="mailtwo" xmlns="urn:oasis:names:tc:DSML:2:0:core">
<value>xxxx@gmail.com</value>
</attr>
<attr name="mailthree" xmlns="urn:oasis:names:tc:DSML:2:0:core">
<value>xxxx@gmail.com</value>
</attr>
</spml:data>
如果您在同一项目中使用C类运行此控制台应用程序并对数据进行调试,您将获得一个带有items=null
的数据对象
有人能把我引向正确的方向吗
编辑:这与名称空间有关:我删除了XML和c#对象中的所有名称空间,它成功了
亲切问候,,
彼得下面的代码可以工作。我更改了名称空间:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication137
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlReader reader = XmlReader.Create(FILENAME);
XmlSerializer serializer = new XmlSerializer(typeof(data));
data d = (data)serializer.Deserialize(reader);
}
}
[System.Xml.Serialization.XmlRootAttribute(Namespace = "urn:oasis:names:tc:SPML:2:0", IsNullable = false)]
public partial class data
{
private attr[] itemsField;
/// <remarks/>
[XmlElement(ElementName = "attr", Namespace = "urn:oasis:names:tc:DSML:2:0:core")]
public attr[] Items
{
get
{
return this.itemsField;
}
set
{
this.itemsField = value;
}
}
}
[System.Xml.Serialization.XmlRootAttribute(Namespace = "urn:oasis:names:tc:DSML:2:0:core", IsNullable = false)]
public partial class attr
{
private string valueField;
private string nameField;
/// <remarks/>
public string value
{
get
{
return this.valueField;
}
set
{
this.valueField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string name
{
get
{
return this.nameField;
}
set
{
this.nameField = value;
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Serialization;
命名空间控制台应用程序137
{
班级计划
{
常量字符串文件名=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
XmlReader=XmlReader.Create(文件名);
XmlSerializer serializer=新的XmlSerializer(类型(数据));
数据d=(数据)序列化程序。反序列化(读取器);
}
}
[System.Xml.Serialization.XmlRootAttribute(Namespace=“urn:oasis:names:tc:SPML:2:0”,IsNullable=false)]
公共部分类数据
{
私有属性[]项字段;
///
[xmlement(ElementName=“attr”,Namespace=“urn:oasis:names:tc:DSML:2:0:core”)]
公共属性[]项
{
得到
{
返回此.itemsField;
}
设置
{
this.itemsField=值;
}
}
}
[System.Xml.Serialization.XmlRootAttribute(Namespace=“urn:oasis:names:tc:DSML:2:0:core”,IsNullable=false)]
公共部分类属性
{
私有字符串值字段;
私有字符串名称字段;
///
公共字符串值
{
得到
{
返回此.valueField;
}
设置
{
this.valueField=值;
}
}
///
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字符串名
{
得到
{
返回此.nameField;
}
设置
{
this.nameField=值;
}
}
}
}
我刚刚测试了这个,它成功了。令我惊讶的是,我用visualstudio中的特殊粘贴将xml转换为类,它给了我一个同样有效的类。xsd工具中出现了一些问题。我学到的是:我完全信任xsd生成的文件,并不认为这是一个错误。下次我会更挑剔。。。谢谢你帮我
using System;
using System.Xml;
using System.Xml.Serialization;
namespace XmlDeserializer
{
class Program
{
static void Main(string[] args)
{
XmlSerializer ser = new XmlSerializer(typeof(data));
data data;
using (XmlReader reader = XmlReader.Create(PATH))
{
data = (data)ser.Deserialize(reader);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication137
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlReader reader = XmlReader.Create(FILENAME);
XmlSerializer serializer = new XmlSerializer(typeof(data));
data d = (data)serializer.Deserialize(reader);
}
}
[System.Xml.Serialization.XmlRootAttribute(Namespace = "urn:oasis:names:tc:SPML:2:0", IsNullable = false)]
public partial class data
{
private attr[] itemsField;
/// <remarks/>
[XmlElement(ElementName = "attr", Namespace = "urn:oasis:names:tc:DSML:2:0:core")]
public attr[] Items
{
get
{
return this.itemsField;
}
set
{
this.itemsField = value;
}
}
}
[System.Xml.Serialization.XmlRootAttribute(Namespace = "urn:oasis:names:tc:DSML:2:0:core", IsNullable = false)]
public partial class attr
{
private string valueField;
private string nameField;
/// <remarks/>
public string value
{
get
{
return this.valueField;
}
set
{
this.valueField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string name
{
get
{
return this.nameField;
}
set
{
this.nameField = value;
}
}
}
}