2010-09-08 54 views
1

通常我编写一个类并为其添加XML序列化以用于我的Web服务。C#如何填充使用数据库中的XSD.EXE创建的类

[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; 
    } 
    } 
} 

回答

3

如果您以字符串的形式从数据库中获取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数组。
<编辑>新增xml.Items[0] = new YourItemsType(); < /编辑>

[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; 
} 
+0

我想这是我的问题。我知道如何从流到序列化...但是,数据库中的数据不是以XML的形式构造的。我写了一个从数据库中提取数据的类,然后将类本身设置为可串行化,以设置xml属性...我只是不确定如何从类到流。 – jon3laze 2010-09-08 21:57:15

+0

@ jon3laze:糟糕,忘了初始化第一个元素,纠正我的例子,再试一次。 – 2010-09-09 05:00:17

0

至于我记得,你可以得到的数据集/ DataTable的XML(的ToString()?或者可能是WriteXML)_,不确定)..然后用那个

+0

对不起,我的问题解释不清楚。我编辑它,希望它现在更有意义。尽管感谢您的回复。 – jon3laze 2010-09-08 04:04:29

+0

阿哈..对不起,我有点撇取你的问题..无论如何,我猜阿尔宾的答案现在是足够的 – 2010-09-08 05:08:23

相关问题