|
分類:[C#]
WindowsFormアプリを
VisualStudioCommunity2017
.NetFramework4.6.1
C# で作成しています。
異なる分類の値を名前空間(AとB)に分けて同じ名前('設定')のクラスを作成してあります。
各々クラスのインスタンス単体で使用するには問題がなかったのですが、この2つの内容を1つのxmlファイルにするため、
名前空間 'C' に '保存クラス' を作成してシリアライズしようとしましたがエラーが発生します。
入れ子になった名前空間では同じ名前のクラスでシリアライズは出来ないのでしょうか?
以下、ソース
namespace プログラム名
{
static class Program
{
(略)
internal static void 保存処理(C.保存クラス c)
{
var _obj = new Common.Settingsfile(c);
var _sr = new System.Xml.Serialization.XmlSerializer(typeof(C.保存クラス));
using (var _sw = new System.IO.StreamWriter(filename, false, new System.Text.UTF8Encoding(false)))
{
_sr.Serialize(_sw, _app);
_sw.Flush();
}
}
}
namespace A
{
[Serializable]
public class 設定
{
(略)
}
}
namespace B
{
[Serializable]
public class 設定
{
(略)
}
}
namespace C
{
[Serializable]
public class 保存クラス
{
public A.設定 設定A { get; set; }
public B.設定 設定B { get; set; }
public 保存クラス()
{
}
public 保存クラス(A.設定 a, B.設定 b)
{
this.設定A = new A.設定(a);
this.設定B = new B.設定(a);
}
}
}
}
以下、エラー内容
内部例外 1:
InvalidOperationException: プロパティ 'testB' を反映中にエラーが発生しました。
内部例外 2:
InvalidOperationException: 型 'B.test' を反映中にエラーが発生しました。
内部例外 3:
InvalidOperationException: 型 'A.test' および 'B.test' は、名前空間 '' の XML 型名 'test' を使用しています。
この型の、一意の XML または名前空間を指定するには XML 属性を使用してください。
型名(クラス名)を変更せずに回避できる方法がありましたら、ご教授いただければ幸いです。
|