0

私は WebForms にいて、オブジェクトを XML コードにシリアライズしようとしています。さて、使用:

using (FileStream writer = new FileStream("c:/temp/file.xml", FileMode.Create, FileAccess.Write))
{
    DataContractSerializer ser = new DataContractSerializer(videoContainer.GetType());
    ser.WriteObject(writer, videoContainer);
}

次のエラーが表示されました: Type 'Google.GData.YouTube.YouTubeEntry' with data contract name 'YouTubeEntry: http://schemas.datacontract.org/2004/07/Google.GData.YouTube ' is not expected. たとえば、KnownTypeAttribute 属性を使用するか、DataContractSerializer に渡される既知の型のリストにそれらを追加することにより、静的に認識されていない型を既知の型のリストに追加します。

だから私はこれを試しました:

IEnumerable<string> lista = new List<string>();
lista.ToList().Add("YouTubeEntry:http://schemas.datacontract.org/2004/07/Google.GData.YouTube");

using (FileStream writer = new FileStream("c:/temp/file.xml", FileMode.Create, FileAccess.Write))
{
    DataContractSerializer ser = new DataContractSerializer(videoContainer.GetType(), lista);
    ser.WriteObject(writer, videoContainer);
}

KnownTypeAttribute リストを渡しますが、リストを取得できないようですか? :O どうすればいいのかわからない...

4

2 に答える 2

2

文字列のリストではなく、タイプのリストを提供する必要があります

var lista = new List<Type>();
lista.Add(typeof(Google.GData.YouTube.YouTubeEntry));

using (FileStream writer = new FileStream("c:/temp/file.xml", FileMode.Create, FileAccess.Write))
{
    DataContractSerializer ser = new DataContractSerializer(videoContainer.GetType(), lista);
    ser.WriteObject(writer, videoContainer);
}
于 2013-03-11T12:01:43.583 に答える
1

Type オブジェクトのコレクションをコンストラクターに渡す必要があります。文字列ではありません。

DataContractSerializer ser = new DataContractSerializer(videoContainer.GetType(), new List<Type> {typeof(YouTubeEntry)});
于 2013-03-11T12:02:58.110 に答える