0

おそらくこれは非常に基本的な質問かもしれませんが、理解のために小さなサンプルプロジェクトに取り組んでおり、これを完了するにはここで助けが必要です.

public class XMlExample : INotifyPropertyChanged
        {
            [XmlElement("ID")]
            public string ID { get; set; } //Textbox
            [XmlAttribute("Initial")]
            public string Initial { get; set; } //Textbox



            public event PropertyChangedEventHandler PropertyChanged;
        }
public class Details //Datagrid
                {
                    [XmlElement("FirstName")]
                    public string FirstName { get; set; }
                    [XmlElement("LastName")]
                    public string LastName { get; set; }
                }

これは未完成の関数です:

読み書き機能: XML ファイルを読み取る Button1:

 XmlSerializer deserializer = new XmlSerializer(typeof(XMlExample));
            TextReader textReader = new StreamReader(@"C:\test\testserialization.xml");
            XMlExample xmlexmaple;
            xmlexmaple = (XMlExample)deserializer.Deserialize(textReader);
            textReader.Close();

XML ファイルを書き込むボタン 2:

XmlSerializer serializer = new XmlSerializer(typeof(XMlExample));
            TextWriter textWriter = new StreamWriter(@"C:\test\testserialization.xml");
            serializer.Serialize(textWriter, XXXX);
            textWriter.Close();

テキストボックスとデータグリッドから値を取得してxmlファイルとして書き込む方法と、それをインターフェイスに読み戻す方法を教えてください。ありがとうございました。

4

1 に答える 1

1

をシリアライズ/デシリアライズするDatagridには、クラスにそのプロパティを追加し、両方のクラスに属性をXMLExample追加します。Serializable

[Serializable]
public class XMLExample : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public XMLExample()
    {
        ID = "Spaghetti";
        Initial = "Linguini";
        Details = new List<Detail>();
    }

    public string ID { get; set; } // Textbox
    public string Initial { get; set; } // Textbox
    public List<Detail> Details { get; set; } // Datagrid
}

[Serializable]
public class Detail 
{
    public Detail()
    {
        // default values, if appropriate.
        FirstName = "John"; 
        LastName = "Shaw";
    }

    [XmlElement("FirstName")]
    public string FirstName { get; set; }
    [XmlElement("LastName")]
    public string LastName { get; set; }
}

デシリアライズ後、Button1ハンドラーでユーザー インターフェイス コントロールを適切に設定できます。クラスをシリアル化する前に、Button2ハンドラーで、クラスのプロパティを適切に設定する必要があります。

XmlSerializer _serializer = new XmlSerializer(typeof(XMLExample));
XMLExample _example = new XMLExample();

// Read file.
using (TextReader textReader = new StreamReader(@"C:\test\testserialization.xml"))
{
    _example = (XMLExample)_serializer.Deserialize(textReader);
    textReader.Close();
}

// Populate user interface from the class.
textBox1.Text = _example.ID;
textBox2.Text = _example.Initial;
// etc...

// Update class from user interface
_example.Details.Add(new Detail() { FirstName = "John", LastName = "Doe" });
_example.Details.Add(new Detail() { FirstName = "Jane", LastName = "Doe" });

// Write file.
using (TextWriter textWriter = new StreamWriter(@"C:\test\testserialization.xml"))
{
    _serializer.Serialize(textWriter, _example);
    textWriter.Close();
}

testserialization.xml

<?xml version="1.0" encoding="utf-8"?>
<XMLExample xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ID>Spaghetti</ID>
  <Initial>Linguini</Initial>
  <Details>
    <Detail>
      <FirstName>John</FirstName>
      <LastName>Doe</LastName>
    </Detail>
    <Detail>
      <FirstName>Jane</FirstName>
      <LastName>Doe</LastName>
    </Detail>
  </Details>
</XMLExample>
于 2012-10-13T13:35:57.430 に答える