■64354 / inTopicNo.2) |
Re[1]: リストボックスにXMLNode[]と表示される |
□投稿者/ 魔界の仮面弁士 (95回)-(2012/11/28(Wed) 21:07:57)
|
■No64351 (もろぞう さん) に返信
> public class Team
> {
> public Players player { get; set; }
> }
> public class Players
> {
> [XmlElement]
> public ArrayList player { get; set; }
> }
どのシリアライザを使っているのか分かりませんが、たとえば上記を
Team team = new Team() { player = new Players() { player = new ArrayList() { "鈴木", "山田", "佐藤" } } };
StringBuilder sb = new StringBuilder();
new XmlSerializer(typeof(Team)).Serialize(new StringWriter(sb), team);
string xml = sb.ToString();
なコードで『シリアライズ』した場合、XML の内容は
<team>〜</team> ではなく
<Team>〜</Team> となるはずです。
もしも <Team /> ではなく <team /> で管理したいなら、XmlSerializer では
[XmlRoot(ElementName="team")]
public class Team
{
public Players player { get; set; }
}
とする必要がありそうです。
> List<Players> player = new List<Players>();
この変数の用途は何でしょうか?
> playerBindingSource.DataSource = readObjXML.team.players;
readObjXML という物が何を表しているのか分かりませんが、
少なくとも team クラスに players プロパティはありませんよね。
> ----XMLファイル
> <team>
> <players>
> <player>鈴木</player>
> <player>山田</player>
> <player>佐藤</player>
> </players>
> </team>
元のコードとは幾許か異なってしまいますが、たとえば:
//---------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using System.Xml.Serialization;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
[XmlRoot(ElementName = "team")]
public class Team
{
public Players player { get; set; }
}
public class Players
{
[XmlElement]
public ArrayList player { get; set; }
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
List<Team> player = new List<Team>();
#region "デシリアライズ"
string xml = @"<?xml version='1.0' encoding='utf-16'?>
<team xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
<player>
<player xsi:type='xsd:string'>鈴木</player>
<player xsi:type='xsd:string'>山田</player>
<player xsi:type='xsd:string'>佐藤</player>
</player>
</team>";
Team team = null;
using(StringReader stm = new StringReader(xml))
{
XmlSerializer ser = new XmlSerializer(typeof(Team));
team = (Team)ser.Deserialize(stm);
stm.Close();
}
#endregion
bindingSource1.DataSource = team.player;
bindingSource1.DataMember = "player";
listBox1.DataSource = bindingSource1;
}
}
}
|
|