2013-01-02 17 views
1

我有一个表必须序列化。字符串列表串行器

其我的课,我给它添加

public class NewCVXml 
{ 
    [XmlArray] 
    [XmlArrayItem(ElementName = "Name")] 
    public List<string> FieldFirst { get; set; } 
    [XmlArray] 
    [XmlArrayItem(ElementName = "Value")] 
    public List<string> FieldSecond { get; set; } 
    [XmlArray] 
    [XmlArrayItem(ElementName = "State")] 
    public List<string> FieldThird { get; set; } 

} 

从阿贾克斯来到这个值表值(的Request.Form)

{字段1 =名称1 &字段1 = NAME2 &字段1 = NAME3 & field2 = value1 & field2 = value2 & field2 = value3 & field3 = Private & field3 = Public & field3 = Public}

,这是我的C#的功能,通过AJAX调用(张贴)

 string xmlText; 
     NewCVXml newCv = new NewCVXml(); 
     newCv.FieldFirst = Request.Form.GetValues(0).ToList(); 
     newCv.FieldSecond = Request.Form.GetValues(1).ToList(); 
     newCv.FieldThird = Request.Form.GetValues(2).ToList(); 

     try 
     { 
      XmlSerializer serializer = new XmlSerializer(newCv.GetType()); 
      MemoryStream ms = new MemoryStream(); 
      using (XmlTextWriter writer = new XmlTextWriter(ms, Encoding.UTF8) { Formatting = Formatting.Indented }) 
      { 

       serializer.Serialize(writer, newCv); 
       ms = (MemoryStream)writer.BaseStream; 
       xmlText = new UTF8Encoding().GetString(ms.ToArray()); 
       ms.Dispose(); 
       return Content(xmlText); 
      } 
     } 
     catch (Exception e) 
     { 

      return Content("Hata: " + e.Message); 

     } 

这个XML创建

<?xml version="1.0" encoding="utf-8"?> 
<NewCVXml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <FieldFirst> 
    <Name>name1</Name> 
    <Name>name2</Name> 
    <Name>name3</Name> 
    </FieldFirst> 
    <FieldSecond> 
    <Value>value1</Value> 
    <Value>value2</Value> 
    <Value>value3</Value> 
    </FieldSecond> 
    <FieldThird> 
    <State>Private</State> 
    <State>Public</State> 
    <State>Public</State> 
    </FieldThird> 
</NewCVXml> 

my table

但我想这样的事情XML

<?xml version="1.0" encoding="utf-8"?> 
<NewCVXml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Rows> 
    <name1 state="Private">value1</name1> 
    <name2 state="Public">value2</name2> 
    <name3 state="Public">value3</name3> 
</Rows> 
</NewCVXml> 

我不知道我可以如何创建这样的XML。我不能为每一行使用一个类。因为行的单元格是可更改的。我的意思是,它可以是名称1或XXX或YYY或...它依赖于用户。一切都是动态的,我认为我需要使用一个字符串列表并从列表值创建标记名。

回答

1

您的类结构不会以您希望使用标准XmlSerializer的方式序列化为XML。相反,您可以使用IXmlSerializable实现自定义序列化。

http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

public class NewCVXml : IXmlSerializable { 

    public List<string> FieldFirst { get; set; } 
    public List<string> FieldSecond { get; set; } 
    public List<string> FieldThird { get; set; } 

    public void WriteXml (XmlWriter writer) 
    { 
     // Custom Serialization Here 
    } 

    public void ReadXml (XmlReader reader) 
    { 
     // Custom Deserialization Here 
    } 

    public XmlSchema GetSchema() 
    { 
     return(null); 
    } 

} 
+0

是的。我认为这是我真正需要的。谢谢,我将搜索关于自定义XML序列化:) – ertan2002

0

罗伯特·格雷夫斯说,我需要一个自定义XML序列化。我使用了Robert给出并编辑它的代码。它现在有效,也许有些人会需要它然后我把它放在这里

using System.Collections.Generic; 
using System.Xml; 
using System.Xml.Schema; 
using System.Xml.Serialization; 

namespace E_Cv.Functions 
{ 
    public class NewCVXml :IXmlSerializable 
    { 

     public List<string> FieldFirst { get; set; } 
     public List<string> FieldSecond { get; set; } 
     public List<string> FieldThird { get; set; } 

     public void WriteXml(XmlWriter writer) 
     { 


      for (int i = 0; i < FieldFirst.Count; i++) 
      { 

       writer.WriteStartElement("Satir"); 

       writer.WriteAttributeString("AlanIsmi",FieldFirst[i]); 
       //writer.WriteString(FieldFirst[i]);  
       writer.WriteAttributeString("AlanTuru", FieldThird[i]); 
       writer.WriteString(FieldSecond[i]); 
       writer.WriteEndElement(); 
      } 


     } 

     public void ReadXml(XmlReader reader) 
     { 
      // Custom Deserialization Here 
     } 

     public XmlSchema GetSchema() 
     { 
      return (null); 
     } 
    } 
} 
相关问题