0

Silverlight でオブジェクトをシリアライズおよびデシリアライズしようとしていますが、うまく動作しないようです。シリアル化は問題なく機能しますが、rootObject が予期されていないと文句を言います。XML を生成したのは Silverlight であるため、わかりません。

ところで; 私はまだC#に不慣れです

次のようなクラスがあります。

[XmlRoot("DataStorage")] // has no effect
public class DataStorage
{
    public string type { get; set; }
    public string imgUrl { get; set; }
    public List<AbstractionObject> children { get; set; }

    public DataStorage()
    {
        type = "default";
        children = new List<AbstractionObject>();
    }
}

Silverlight でシリアル化すると、以下が生成されます。

<?xml version="1.0" encoding="utf-8"?>
<DataStorage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <type>default</type>
  <children />
</DataStorage>

ただし、逆シリアル化しようとすると、次のようになります。

System.InvalidOperationException はユーザー コードによって処理されませんでした Message=XML ドキュメントにエラーがあります (2, 2)。

InnerException: System.InvalidOperationException Message= <DataStorage xmlns=''> は予期されていませんでした。

私の逆シリアル化コードは次のとおりです。

// create the xmlSerializer for DataObject
XmlSerializer xmlSerializer = new XmlSerializer(typeof(DataObject));

// Open the file again for reading.
StreamReader fileStream = new StreamReader(isoStore.OpenFile("IsoStoreFile.xml", FileMode.Open));
XmlReader xmlReader = XmlReader.Create(fileStream);

DataObject deserializedObject = (DataObject)xmlSerializer.Deserialize(xmlReader);
fileStream.Close();

Debug.WriteLine(deserializedObject);

何か案が?

4

1 に答える 1

0

これがあなたの例の単なるタイプミスであるかどうかはわかりませんが、最初のブロックで定義したクラスは「DataStorage」であり、「DataObject」をシリアル化および逆シリアル化しています。 「DataStorage」に遭遇します。

于 2010-08-14T13:17:09.740 に答える