2017-11-14 1 views
0

私はオブジェクトにXMLファイルをデシリアライズしたいのですが、私のXMLは、私が(ID値を含む)すべてのparamsを含むモデルを持っているこの解析C#でオブジェクトにspecyficのXMLファイル(ユニティ)

<ALLObjects> 
<object ID ="1"> 
    <param1>Clicks</param1> 
    <param2>NONE</param2> 
    <param3>example</param3> 
    <param4>example23</param4> 
    <param5>1</param5> 
    <param6>1</param6> 
</object> 

<object ID ="2"> 
    <param1>Clicks</param1> 
    <param2>NONE</param2> 
    <param3>Example23</param3> 
    <param4>Example 1</param4> 
    <param5>10</param5> 
    <param6>1</param6> 
</object> 

//more objects 

</ALLObjects> 

のように見えます。私はすべてのオブジェクトをリストにロードしていくつかの変更を加え、同じXMLファイルに保存したいと思います。私はXMLがこの形式のときの動作を知っています

<object > 
<ID>1</ID> 
<param1>Clicks</param1> 
<param2>NONE</param2> 
<param3>example</param3> 
<param4>example23</param4> 
<param5>1</param5> 
<param6>1</param6> 
</object> 

しかし、私は手動でファイル全体をその形式にロードする必要はありません。私はこの事件のために最良のpraticが何であるかのヒントが必要です。たぶん私はそれをjsonにロードし、次にオブジェクトに解析する必要がありますか?

@chade_は、現在、私がXmlSerializerをを使用しようとするが、アイブ氏は、エラー

InvalidOperationException: <achievements xmlns=''> was not expected 
を得た

私のコード:LoadingFromFile

private void LoadData() 
    { 
     List<AchivmentModel> models; 
     using (var reader = new StreamReader("test.xml")) 
     { 
      XmlSerializer deserializer = new XmlSerializer(typeof(List<AchivmentModel>), 
       new XmlRootAttribute("ALLObjects")); 
      models = (List<AchivmentModel>)deserializer.Deserialize(reader); 
     } 
    } 


[System.Serializable, XmlRoot("ALLObjects")] 
public class AchivmentList 
{ 
    public AchivmentList() { Items = new List<AchivmentModel>(); } 
    [XmlElement("object")] 
    public List<AchivmentModel> Items { get; set; } 
} 



[System.Serializable, XmlType("object ")] 
public class AchivmentModel 
{ 
    public AchivmentModel() { } 

    [XmlElement("ID")] 
    public int ID { get; set; } 
    [XmlElement("param1")] 
    public string Progress { get; set; } 
    [XmlElement("param2")] 
    public string Reward { get; set; } 

    [XmlElement("param3")] 
    public string Title { get; set; } 
    [XmlElement("param4")] 
    public string Description { get; set; } 
    [XmlElement("param5")] 
    public int param6{ get; set; } 
    [XmlElement("param6")] 
    public int AchivmentAnimalSubtitle { get; set; } 

} 
} 
+1

を "...この場合のための最高のPRATIC何である" あなたが今何を使うのですか? –

+0

@chade_私の質問を更新します – Expiredmind

+0

あなたの例のxmlに ''は表示されません。それはどこから来ていますか? – rene

答えて

0

あなたからの要素の代わりに属性値をロードしたい場合は、あなたのあなたはモデルクラスのプロパティを装飾する必要があります。[XmlAttribute]

このモデルのモデル:

[System.Serializable, XmlType("object")] 
public class AchivmentModel 
{ 
    // serialize attribute on the XmlNode 
    [XmlAttribute("ID")] 
    public int ID { get; set; } 
    // serialize an element value 
    [XmlElement("param1")] 
    public string Progress { get; set; } 
    // other properties omitted 
} 

が、このXMLからdeserialiseます:

<object ID="2"> <!-- Deserialize ID with XmlAttribute --> 
    <param1>Clicks</param1> <!-- deserialize with XmlElement --> 
    <!-- other elements omitted --> 
</object>