C#如何填充从数据库使用XSD.EXE创建的类
通常,我会为我的web服务编写一个类并向其中添加XML序列化C#如何填充从数据库使用XSD.EXE创建的类,c#,.net,xsd,xml-serialization,C#,.net,Xsd,Xml Serialization,通常,我会为我的web服务编写一个类并向其中添加XML序列化 [XmlRootAttribute(ElementName = "dsXmlSummary", IsNullable=true)] public class Class1 { //declare properties //make database calls to pull data and load properties } 我正在从事一个需要使用严格XSD的项目,我按照使用XSD.EXE工具创建基于XSD的类的
[XmlRootAttribute(ElementName = "dsXmlSummary", IsNullable=true)]
public class Class1
{
//declare properties
//make database calls to pull data and load properties
}
我正在从事一个需要使用严格XSD的项目,我按照使用XSD.EXE工具创建基于XSD的类的说明进行了操作。我的解释是,这个自动生成的类将取代我的普通序列化类
如果是这种情况,我完全无法将数据加载到类属性中。
我从另一次步行中收集到:
[WebMethod]
public dsXmlSummary getXML()
{
TextReader reader = new StreamReader("data.xml");
dsXmlSummary ds = (dsXmlSummary)serializer.Deserialize(reader);
reader.Close();
}
然而,我拥有的数据位于SQL数据库中……我想我应该能够编写一个方法来填充dsXmlSummary
类,但是我找不到任何关于这样做的文档。所有示例都与上面类似,从实际的物理xml文档加载或读取
我尝试测试手动加载:
[WebMethod]
public dsXmlSummary getXML()
{
dsXmlSummary xml = new dsXmlSummary();
xml.Items[0].nameFirst = "Mark"; //error thrown here: System.NullReferenceException: Object reference not set to an instance of an object.
xml.Items[0].nameLast = "Twain";
xml.Items[0].Type = "Writer";
return xml;
}
很明显,我在这件事上完全错了。非常感谢您的指导
编辑
我的WebMethod
[WebMethod]
public dsXmlSummary getXML()
{
dsXmlSummary xml = new dsXmlSummary();
dsXmlSummaryAdmin_reports_xmlReports[] items = new dsXmlSummaryAdmin_reports_xmlReports[1];
items[0].nameFirst = "Mark"; //error still thrown here: System.NullReferenceException: Object reference not set to an instance of an object.
items[0].nameLast = "Twain";
items[0].Type = "Writer";
xml.Items = items;
return xml;
}
自动生成的类
public partial class dsXmlSummary {
private dsXmlSummaryAdmin_reports_xmlReports[] itemsField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("admin_reports_xmlReports")]
public dsXmlSummaryAdmin_reports_xmlReports[] Items {
get {
return this.itemsField;
}
set {
this.itemsField = value;
}
}
}
公共部分类dsXmlSummary{
专用dsXmlSummaryAdmin_reports_xmlReports[]项字段;
///
[System.Xml.Serialization.xmlementAttribute(“admin\u reports\u xmlReports”)]
公共dsXmlSummaryAdmin_报告_xmlReports[]项{
得到{
返回此.itemsField;
}
设置{
this.itemsField=值;
}
}
}
据我记忆所及,您可以获取数据集/数据表XML(ToString()?或可能是WriteXML)\ uu,不确定)。。然后使用这个据我记忆所及,您可以获得数据集/数据表XML(ToString()?或者可能是WriteXML)u,不确定)。。然后使用这个如果您从数据库中获取XML作为字符串,您可以使用。或者,如果您得到一个字节[]
,您可以尝试一个
如果将XML作为字符串从数据库中获取,则可以使用。或者,如果您得到一个
字节[]
,您可以尝试一个
对不起,我的问题解释不清楚。我编辑了它,希望它现在更有意义。谢谢你的回复。啊哈。。对不起,我略过了你的问题。。不管怎样,我想阿尔宾的答案现在已经足够了对不起,我的问题解释不清楚。我编辑了它,希望它现在更有意义。谢谢你的回复。啊哈。。对不起,我略过了你的问题。。不管怎样,我想阿尔宾的答案已经足够了,我想这是我的问题。我知道如何从流到序列化…但是数据在数据库中不是XML结构。我编写了一个类,从数据库中提取数据,然后设置xml属性使该类本身可序列化…我只是不知道如何将其从类中获取到流。@jon3laze:Oops,忘了初始化第一个元素,更正了我的示例,再试一次。上面的代码示例中没有定义序列化程序。我就是这样让它工作的:var serializer=new System.Xml.Serialization.XmlSerializer(typeof(dsXmlSummary));我想这是我的问题。我知道如何从流到序列化…但是数据在数据库中不是XML结构。我编写了一个类,从数据库中提取数据,然后设置xml属性使该类本身可序列化…我只是不知道如何将其从类中获取到流。@jon3laze:Oops,忘了初始化第一个元素,更正了我的示例,再试一次。上面的代码示例中没有定义序列化程序。我就是这样让它工作的:var serializer=new System.Xml.Serialization.XmlSerializer(typeof(dsXmlSummary));
[WebMethod]
public dsXmlSummary getXML()
{
TextReader reader = new StringReader("<dsXmlSummary><FirstName>Mark</FirstName></dsXmlSummary>");
dsXmlSummary ds = (dsXmlSummary)serializer.Deserialize(reader);
reader.Close();
}
[WebMethod]
public dsXmlSummary getXML()
{
dsXmlSummary xml = new dsXmlSummary();
xml.Items = new YourItemsType[1]; // <-- initialize here
xml.Items[0] = new YourItemsType(); // <-- initialize first object
xml.Items[0].nameFirst = "Mark"; //error thrown here: System.NullReferenceException: Object reference not set to an instance of an object.
xml.Items[0].nameLast = "Twain";
xml.Items[0].Type = "Writer";
return xml;
}