【C#・WPF・UWP】XMLシリアライズをするとInvalidOperationExceptionが発生する

意外と気づかないポイントだったりするよ

みなさん、こんにちは!

先日、友人の家に行ったら、ペットの犬がちゃんと決められた場所でトイレをしていたのです。

それで感心して「すごいね」って言おうとしたけど、 「よく考えたら、僕もちゃんとトイレでしてるな」と思って言うのを止めたあらたまです。

C#でXMLシリアライズをしたときに、System.InvalidOperationExceptionが発生することがあります。

修正前のソースコード

シリアライズするソースコードはこんな感じです。

メイン関数

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

namespace XmlSerializeTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // シリアライズしたいクラス
            Something something = new Something();

            // シリアライザーの準備
            XmlSerializer serializer = new XmlSerializer(typeof(Something));
            StringBuilder sb = new StringBuilder();
            StringWriter sw = new StringWriter(sb);

            // Xmlシリアライズ
            serializer.Serialize(sw, something);

            // 結果を表示
            Console.Write(sw.ToString());
            Console.ReadLine();
        }
    }
}

シリアライズしたいクラス

using System;
using System.Collections.Generic;
using System.Text;

namespace XmlSerializeTest
{
    class Something
    {
        public Something()
        {
            this.SomethingValue = 99;
        }

        public int SomethingValue
        {
            get;set;
        }
    }
}

とくに変わったところはないですね。これを実行するとこんな感じ。 例外が発生している画面

シリアライザーを生成するときに、例外が発生していますね。

修正する

修正は簡単です。
シリアライズしたいクラスのクラス名の前に『public』を付けます。 修正したソースコード

これだけ。では、動かしてみましょう!

動かしてみる

動かしてみると、無事XMLへシリアライズすることができました! 正常にシリアライズできた画面