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

}

これはajax(Request.Form)からの値です

{field1 = name1&field1 = name2&field1 = name3&field2 = value1&field2 = value2&field2 = value3&field3 = Private&field3 = Public&field3 = Public}

これはajaxによって呼び出された私のc#関数です(投稿用)

       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>

私のテーブル

しかし、私はその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のように作成する方法がわかりません。各行にクラスを使用することはできません。行のセルは変更可能だからです。つまり、name1、XXX、YYY、または...ユーザーによって異なります。すべてが動的であるため、文字列リストを使用し、リスト値からタグ名を作成する必要があると思います。

4

2 に答える 2

1

クラス構造は、標準の XmlSerializer を使用する方法で XML にシリアル化されません。代わりに、IXmlSerializable を使用してカスタム シリアル化を実装できます。

http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixlserializable.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);
    }

}
于 2013-01-02T15:17:42.243 に答える