通常我会编写一个类并为其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的类的说明。我的解释是这个自动生成的类将取代我的正常序列化类。
如果是这种情况,我在将数据加载到类属性时完全丢失了。 我从另一个走过来收集了这个:
[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;
}
}
}
答案 0 :(得分:4)
如果您从数据库中获取XML作为字符串,则可以使用StringReader
。或者,如果您获得byte[]
,则可以尝试MemoryStream
。
[WebMethod]
public dsXmlSummary getXML()
{
TextReader reader = new StringReader("<dsXmlSummary><FirstName>Mark</FirstName></dsXmlSummary>");
dsXmlSummary ds = (dsXmlSummary)serializer.Deserialize(reader);
reader.Close();
}
关于“手动”示例,您需要初始化Items数组
的&LT;编辑&gt;添加了xml.Items[0] = new YourItemsType();
&lt; / edit&gt;
[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;
}
答案 1 :(得分:0)
据我记忆,您可以获取数据集/数据表XML(ToString()?或者可能是WriteXML)_,不确定)..然后使用