- PR -

空のクラスをXMLシリアライズした時にドキュメントも空になる

1
投稿者投稿内容
あひる隊長
常連さん
会議室デビュー日: 2003/07/23
投稿数: 36
投稿日時: 2004-10-05 16:47
以下のクラスがあったとします。

コード:
class SampleClass
{
    string value1;
    string value2;
}



このクラスを以下のコードでXMLシリアライズします

コード:
SampleClass obj = new SampleClass();
StringWriter wr = new StringWriter();
            
XmlSerializer serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(wr, obj);

Console.WriteLine(writer.ToString());



これだと
コード:
"<?xml version="1.0" encoding="utf-16"?>
<SampleClass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="">
</SampleClass>


と表示されてしまいます・・

フィールド値がnullの場合でも

コード:
"<?xml version="1.0" encoding="utf-16"?>
<SampleClass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="">
<value1></value1>
<value2></value2>
</SampleClass >"


とフィールド要素が表示されるようにすることはできるのでしょうか?

宜しくお願いいたします。

VS.NET2003 + Win2kServerです。
chack
常連さん
会議室デビュー日: 2002/11/18
投稿数: 48
お住まい・勤務地: 埼玉県
投稿日時: 2004-10-05 18:35
コード:
class SampleClass
{
    public SampleClass()
    {
        value1 = "";
        value2 = "";
    }

    public string value1;
    public string value2;
}


としてコンストラクタで初期化してみてはどうですか?

または、
コード:
SampleClass obj = new SampleClass();
obj.value1 = "";
obj.value2 = "";


とか。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-10-05 22:25
それか、シリアル化メソッドを自作するか、ですね。
_________________
あひる隊長
常連さん
会議室デビュー日: 2003/07/23
投稿数: 36
投稿日時: 2004-10-06 10:12
chackさん、Jittaさん
レスありがとうございます。

ちょっと大きなクラスになると見た目がよくないのですが、
空の値を設定してからシリアライズを行なうやり方で
やってみます。

ただ問題のクラスがXMLスキーマからXSDツールで自動生成
したクラスなので、コンストラクタではなく、呼び出し先
で設定することになりそうです。

ありがとうございました。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-10-06 11:11
スキーマのデフォルト値はどうなのでしょう
1

スキルアップ/キャリアアップ(JOB@IT)