私は、次のような構造を持つクラスのセットがあります。プラン>要素>一覧を<要素>逆シリアル化のXML
[Serializable, XmlRoot("Plan")]
public class Plan
{
public Plan()
{
elements = new Elements();
}
public int floor {get; set};
[XmlElement("elements")]
public Elements elements { get; set; }
}
[Serializable, XmlType("elements")]
public class Elements
{
public Elements() { Items = new List<Element>(); }
[XmlElement("element")]
public List<Element> Items { get; set; }
}
[Serializable]
public class Element
{
public int id { get; set; }
}
このすべては、このXMLにSystem.Xml.Serializationを用いて微細なシリアライズ:
<?xml version="1.0"?>
<Plan xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<elements>
<element>
<id>0</id>
</element>
</elements>
</Plan>
しかし、私は再びそれをデシリアライズしようとすると、要素のクラスが全く読み込まれないとSerialize-後の結果が> Deserialize->のSerialize手順は、次のようになります。
<?xml version="1.0"?>
<Plan xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<floor>0</floor>
<elements />
</Plan>
これは私のデシリアライズ機能である:
public class Program {
public Plan plan;
public static void deserializeXml<T>(this T toDeserialize, string filename)
{
XmlSerializer xmlSerializer = new XmlSerializer(toDeserialize.GetType());
Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
toDeserialize = (T) xmlSerializer.Deserialize(stream);
}
public void loadXml() {
deserializeXml(plan, "plan.xml");
}
}
は、誰かが私に、これは動作しませんなぜ手掛かりを与えることができますか?ありがとう!
[ask]と[mcve]をお読みください。おそらく 'SerializeXml()'または 'DeserializeXml()'に不正な 'T'を渡しているでしょう。特にどこにも出現しない 'floor'要素は、それに向けて示唆されているようです。 – CodeCaster
「フロア」とは何ですか?私はまた、あなたがここに示している以上にあなたがやっていると思っています。 – HimBromBeere
'floor'は私の最小限の例では欠けていた' Plan'のプロパティです。私は今例を完成させるために自分の投稿を更新しました。 – farbro