いくつかのXMLをオブジェクトのリストに逆直列化しようとしています。xmlをオブジェクトのリストにデシリアライズ
問題が発生しているのは、Event
オブジェクト内の2次オブジェクトResources
に値が設定されていないということです。もう少しバックグラウンドでは、これは単一プロジェクトです。私は起こり得るランダムなイベントのリストを逆シリアル化しています。以下は
私がテストしていたXMLです:
ここ<?xml version='1.0'?>
<Events>
<Event>
<Description>
this is a test
</Description>
<Reward>
<Food>
0
</Food>
<Energy>
1
</Energy>
<Happiness>
2
</Happiness>
<ShipHp>
3
</ShipHp>
<Garbage>
4
</Garbage>
</Reward>
<Cost>
<Food>
0
</Food>
<Energy>
1
</Energy>
<Happiness>
2
</Happiness>
<ShipHp>
3
</ShipHp>
<Garbage>
4
</Garbage>
</Cost>
<EventType>
Good
</EventType>
<EventId>
1
</EventId>
</Event>
<Event>
<Description>
this is a test
</Description>
<Reward>
<Food>
0
</Food>
<Energy>
1
</Energy>
<Happiness>
2
</Happiness>
<ShipHp>
3
</ShipHp>
<Garbage>
4
</Garbage>
</Reward>
<Cost>
<Food>
0
</Food>
<Energy>
1
</Energy>
<Happiness>
2
</Happiness>
<ShipHp>
3
</ShipHp>
<Garbage>
4
</Garbage>
</Cost>
<EventType>
Good
</EventType>
<EventId>
1
</EventId>
</Event>
</Events>
は、オブジェクト(イベント・資源)、次のとおりです。
public class EventHandler : MonoBehaviour
{
[XmlInclude(typeof(Event))]
[XmlInclude(typeof(Resources))]
[Serializable, XmlRoot("Events")]
public class EventData
{
[XmlElement("Event")]
public List<Event> Events { get; set; }
public EventData()
{
List<Event> Events = new List<Event>();
}
}
List<Event> Events = new List<Event>();
public static EventHandler instance;
// Use this for initialization, called on script enabling
void Start()
{
var serializer = new XmlSerializer(typeof(EventData));
try
{
string xml = File.ReadAllText("Assets/TextResources/Events.xml");
xml = xml.Replace("\n", string.Empty);
xml = xml.Replace("\r", string.Empty);
xml = xml.Replace("\t", string.Empty);
using (var stringReader = new StringReader(xml))
{
using (var reader = XmlReader.Create(stringReader))
{
var result = (EventData)serializer.Deserialize(reader);
Events = result.Events;
}
}
}
catch(Exception ex)
{
Debug.Log(ex);
}
}
}
:
public class Event {
[XmlElement("Description")]
public string Description { get; set; }
[XmlElement("Reward")]
public Resources Reward { get; set; }
[XmlElement("Cost")]
public Resources Cost { get; set; }
[XmlElement("EventId")]
public int EventId { get; set; }
[XmlElement("EventType")]
public string EventType { get; set; }
}
[XmlType("Resources")]
public class Resources {
//Each prop can be extended to food being a Food object with expiry, etc
[XmlElement("Food")]
public int Food { get; set; } // 0 to cap
[XmlElement("Happiness")]
public int Happiness { get; set; } // 0 to 100
[XmlElement("Energy")]
public int Energy { get; set; } //0 to cap
[XmlElement("ShipHp")]
public int ShipHp { get; set; }// cap to 0
[XmlElement("Garbage")]
public int Garbage { get; set; } // 0 to cap
}
そして、ここでは、私が持っているdeserialzationコードです
このコードから、私のイベントオブジェクトには、Description
、の値が設定されていますとEventId
ですが、Reward
とCost
リソースオブジェクトには値が設定されていません。これまでのところ、私は紛失しています。ボーナスポイントについては、文字列を解析することで得られるデッドスペースをすべて削除する方法を見つけるのにも苦労しています。 (つまり、Goodは "\ n \ r Good"に変更されます)。
ありがとう:将来の読者のために、以下の完全なコードを共有します –