リストを逆シリアル化しようとしています。 Imは、次のエラーを取得:XmlSerializer名前を付けずにリストを逆シリアル化する
System.InvalidOperationException: There is an error in XML document (1, 2). ---> System.InvalidOperationException: was not expected.
のような他のquesitons見ました:{"<user xmlns=''> was not expected.} Deserializing Twitter XMLをが、これはどちらか私の問題を解決していません。
これは
<authorizations>
<id>111</id>
<name>Name 1</name>
<Lists>
<List>
<id>1</id>
<id>2</id>
</List>
</Lists>
</authorizations>
<authorizations>
<id>222</id>
<name>Name 2</name>
<List />
</authorizations>
<authorizations>
<id>333</id>
<name>Name 3</name>
<List />
</authorizations>
クラスは次のように作成されたXMLサンプルです:
public class Authorization
{
[XmlElement("id")]
public string Id{ get; set; }
[XmlElement("name")]
public string Name{ get; set; }
[XmlArray("Lists")]
[XmlArrayItem("List")]
public List[] Items{ get; set; }
}
public class List
{
[XmlElement("id")]
public string Id{ get; set; }
}
public class AuthorizationList
{
[XmlArray("authorizations")]
public Authorization Authorizations{ get; set; }
}
はXmlArray、XmlArrayItemまたは要素にリストを変更しようとしています。デシリアライズするときにも同じエラーが発生します。
デシリアライズコードサンプル:
public static T FromXml<T>(string xmlString)
{
T obj = default(T);
if (!string.IsNullOrWhiteSpace(xmlString))
{
using (var stringReader = new StringReader(xmlString))
{
var xmlSerializer = new XmlSerializer(typeof(T));
obj = (T)xmlSerializer.Deserialize(stringReader);
}
}
return obj;
}
これは*有効な*( 'XmlSerializer'によって期待される)xmlではありません。有効なものは '<?xml version =" 1.0 "?>'から始まります。 'Deserialize()'を呼び出す前に、この行を追加することができます。別のものは、配列項目のコンテナ( 'XmlRootAttribute'で表されます)がありません。 [this](http://stackoverflow.com/q/126155/1997232)。 – Sinatr
'XmlSerializer'は、XML宣言が欠けているXMLを処理できます。ただし、XMLには唯一の[ルート要素](https://en.wikipedia.org/wiki/Root_element)が必要です。このXMLには複数のルート要素があるため、実際にはXMLではありません。 – dbc
ルート要素を追加してお知らせください。速い応答をありがとう – RSmart