簡體   English   中英

從C#類生成XML

[英]Generate xml from c# class

如果有人可以幫助我構造以下格式的XML,我將不勝感激:

<requests>
<row no="1">
<fl val="Subject">Add Records Demo</fl>
<fl val="ContactName">John</fl>
<fl val="ProductName">Customer Care</fl>
<fl val="Email">john@demo.com</fl>
<fl val="Phone">002200330044</fl>
</row>
</requests>

到目前為止,這是我得到的:

<?xml version="1.0" encoding="utf-8"?>
<request>
<row>
<Subject>Add Records Demo</Subject>
<ContactName>John</ContactName>
<ProductName>Customer Care</ProductName>
<Email>john@demo.com</Email>
<Phone>002200330044</Phone>
</row>
</request>

這是我用來構造xml的代碼

 List<ZohoVM> lzr = new List<ZohoVM>();
 lzr.Add(zvm);
 Request rp = new Request();
 rp.zohorow = lzr;
 XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
 ns.Add("", "");
 XmlSerializer xsdocument = new XmlSerializer(typeof(Request));
 StringWriter sw = new Utf8StringWriter();
 string xml = "";
 using (XmlWriter writer = XmlWriter.Create(sw))
 {
    xsdocument.Serialize(writer, rp, ns);
    xml = sw.ToString();
 }
 return xml;

我的要求班

[XmlRoot("request")]
public class Request
{
   public Request()
   {
      zohorow = new List<ZohoVM>();
   }
    [XmlElement("row")]
    public List<ZohoVM> zohorow { get; set; }
}

還有我的ZohoVm類

public class ZohoVM
{
   public string Subject { get; set; }
   public string ContactName { get; set; }
   public string ProductName { get; set; }
   public string Email { get; set; }
   public int Phone { get; set; }
}

我真正想要的是在xml標記中包含“ fl值”。 提前致謝

我擔心XmlSerializer不夠靈活。 但是,您可以做的是從要實現的示例XML中提取XML-Schema。 使用上述內容,例如可以編寫以下架構:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="requests" type="Request"/>
  <xs:complexType name="RowFlag">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute type="xs:string" name="val" use="optional"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="Row">
    <xs:sequence>
      <xs:element type="RowFlag" name="fl" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute type="xs:byte" name="no"/>
  </xs:complexType>
  <xs:complexType name="Request">
    <xs:sequence>
      <xs:element type="Row" name="row"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

也許您可以根據需要優化此架構。 然后,可以使用帶有/classes選項的xsd.exe生成用於創建此架構的/classes 在生成的代碼中,可以添加便捷屬性,然后必須使用XmlIgnore -attribute進行標記。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM