*

[C#]XML Serializerで読み書き

公開日: : 最終更新日:2015/08/29 C#

XML

XMLを触りたいので適当にメモ書き

書き出し

using System.IO;
using System.Xml.Serialization;

class Program {
	static void Main(string[] args) {
		string fileName = @"C:\Users\hoge\Desktop\tmp\test.xml";
		Serialize(fileName);
	}
	static void Serialize(string fileName) {
		Test enc = new Test();
		enc.i = 1;
		enc.boo = true;
		enc.str = @"test";

		XmlSerializer serializer = new XmlSerializer(typeof(Test));
		using (StreamWriter writer = new StreamWriter(fileName, false, new System.Text.UTF8Encoding(false))) {
			serializer.Serialize(writer, enc);
		}
	}
}

public class Test {
		
	public int i;
	public bool boo;
	public string str;
}

結果はこんな感じ

<?xml version="1.0" encoding="utf-8"?>
<Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <i>1</i>
  <boo>true</boo>
  <str>test</str>
</Test>

読み出し

static void Deserialize(string fileName) {
	XmlSerializer serializer = new XmlSerializer(typeof(Test));
	using (StreamReader reader = new StreamReader(fileName, new System.Text.UTF8Encoding(false))) {
		Test enc = (Test)serializer.Deserialize(reader);
	}
}

配列で読み書き

static void DesirializeArray(string fileName) {
	XmlSerializer serializer = new XmlSerializer(typeof(Test[]), new XmlRootAttribute("TEST"));
	using (StreamReader reader = new StreamReader(fileName, new System.Text.UTF8Encoding(false))) {
		Test[] encs = (Test[])serializer.Deserialize(reader);
	}
}

static void SerializeArray(string fileName) {
	Test[] encs = new Test[]{
		new Test(),
		new Test(),
		new Test(),
	};

	foreach (Test enc in encs) {
		enc.i = 1;
		enc.boo = false;
		enc.str = "test";
	}

	XmlSerializer serializer = new XmlSerializer(typeof(Test[]));
	using (StreamWriter writer = new StreamWriter(fileName, false, new System.Text.UTF8Encoding(false))) {
		serializer.Serialize(writer, encs);
	}
}

結果はこんな感じ。

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfTest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Test>
    <i>1</i>
    <boo>false</boo>
    <str>test</str>
  </Test>
  <Test>
    <i>1</i>
    <boo>false</boo>
    <str>test</str>
  </Test>
  <Test>
    <i>1</i>
    <boo>false</boo>
    <str>test</str>
  </Test>
</ArrayOfTest>

配列のときのArrayofというのが気に入らないとき

XmlSerializer serializer = new XmlSerializer(typeof(Test[]), new XmlRootAttribute("TEST"));

こんな感じでRootの属性をコンストラクタに引き渡す。

<?xml version="1.0" encoding="utf-8"?>
<TEST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Test>
    <i>1</i>
    <boo>false</boo>
    <str>test</str>
  </Test>
  <Test>
    <i>1</i>
    <boo>false</boo>
    <str>test</str>
  </Test>
  <Test>
    <i>1</i>
    <boo>false</boo>
    <str>test</str>
  </Test>
</TEST>

xmlnsなにがしが気に入らないとき

XmlSerializerNamespaces xmlNamespace = new XmlSerializerNamespaces();
xmlNamespace.Add(string.Empty, string.Empty);
XmlSerializer serializer = new XmlSerializer(typeof(Test[]), new XmlRootAttribute("TEST"));
using (StreamWriter writer = new StreamWriter(fileName, false, new System.Text.UTF8Encoding(false))) {
	serializer.Serialize(writer, encs, xmlNamespace);
}

ネームスペースを渡してあげる。

<?xml version="1.0" encoding="utf-8"?>
<TEST>
  <Test>
    <i>1</i>
    <boo>false</boo>
    <str>test</str>
  </Test>
  <Test>
    <i>1</i>
    <boo>false</boo>
    <str>test</str>
  </Test>
  <Test>
    <i>1</i>
    <boo>false</boo>
    <str>test</str>
  </Test>
</TEST>

ad

関連記事

wannabenote

[Excel,C#]C#でExcelにデータを一括出力する

大体いつも忘れるこのやり方。 Excelにデータを出力する 方法論 単純な方法ではデータを一行

記事を読む

wannabenote

[C#]マルバツゲームを作ろう

Twitterでお題を出してください、というツイートに脊椎反射でマルバツゲームとか言ってしまったんで

記事を読む

Wannabenote

[Unity]Unity2Dチュートリアル パズルを落下させる。

前回の続き。 とりあえず、パズルが消えたので、パズルを落としましょう。 以下のようにソースを

記事を読む

logo

[Unity]Unity2Dチュートリアル 同じ色のパズルを消去する ソース解説

◆全文 using UnityEngine; using System.Collecti

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 同じ色で繋がったパズルを消去する

前回の続き。 前回で横に同じ色がある場合は消去できるようになりました。 テトリスとぷよぷよを足し

記事を読む

logo

[C#]BinaryFormatterでのDeserializeが遅い。遅すぎる。

概要 BinaryFormatterのサイズ的には大して変わらんとして、じゃあ速度的にはどうなのよ

記事を読む

wannabenote

[C#]ポートを使用しているプロセスを特定してAcivateするやつ

ポートからプロセスを特定してAcivateするやつ作りました。 https://github.

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 同じ色で繋がったパズルを消去する ソース解説

◆全文 using UnityEngine; using System.Collecti

記事を読む

Unity_

[Unity]Unity 2Dチュートリアル スプライトを元の位置に戻す

前回ドラッグして移動するところまでは作成したのですが、パズドラって、タップしてもその場から動かさなか

記事を読む

logo

[Unity]GameObject.Findは遅い

遅いらしいです。 なので、マネージャークラスを作りましょう、というのが風潮らしいです。 マネージ

記事を読む

ad

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

ad

  •  Auther;わなび

     「オープン系得意だよね? 俺のPCの調子悪いんだけど」という無茶振りから解き放たれゲームエンジニアに。
    C#とかUnityを扱います。
    Twitterフォロー大歓迎です。
    githubアカウント→wannabenote
  • follow us in feedly
PAGE TOP ↑