【发布时间】:2014-04-10 14:33:42
【问题描述】:
我正在尝试读/写一个 xml 文件来为我的游戏存储一些数据。这是我要存储的对象:
public struct EndRaceData
{
// Data used to display section by section data
public List<SpeedRecord> speedRecords { get; set; }
// Data used for making a map
public List<KeyValuePair<String,SpeedRecord>>recordsByname { get; set; }
// Taken from Datatracker.instance
public List<KeyValuePair<String,List<DataRecorder.GPSPoint>>> pointsPerChallenge { get; set; }
// Taken from DataRecorder.instance
public List<SpeedSegment> averageSpeeds { get; set; }
// Taken from IPlayer..
public float caloriesburnt { get; set; }
// Taken from Datatracker.instance
public float topSpeed { get; set; }
// taken from Datatracker.instance
public float points { get; set; }
// taken from Datatracker.instance
public string difficulty { get; set; }
// taken from Datatracker.instance
public float completedPercentage { get; set; }
// challenge-specific data
public int passedChallenges { get; set; }
// Datatracker.instance
public int failedChallenges { get; set; }
// Datatracker.instance
public int fastChallengesPassed { get; set; }
// Datatracker.instance
public int slowChallengesPassed { get; set; }
// Datatracker.instance
public int keepChallengesPassed{ get; set; }
// Datatracker.instance
public string startTime { get; set; }
// Datatracker.instance
public string endTime { get; set; }
public float distanceTravelled { get; set; }
public string filePath {get; set;}
}
SpeedRecord 在哪里:
public struct SpeedRecord
{
public float speed;
public float distance;
public string name;
public string sectionStartTime, sectionEndTime;
public SpeedRecord (string name, float speed, float distance, DateTime startTime, DateTime endTime)
{
this.speed = speed;
this.name = name;
this.distance = distance;
this.sectionStartTime = startTime.ToString ();
this.sectionEndTime = endTime.ToString ();
}
public override string ToString ()
{
return string.Format ("{0}\r\nAVG speed : {1} km/h\r\nDist : {2} m\r\nTime : {3} -> {4}\r\n", this.name, this.speed, this.distance, this.sectionStartTime, this.sectionEndTime);
}
}
SpeedSegment 是:
public struct SpeedSegment
{
public float speed;
public float time;
}
最后 GPSPoint 是:
public struct GPSPoint
{
public float lat;
public float lon;
public float accuracy;
public float time;
public GPSPoint (float lat, float lon, float acc, float time)
{
this.lat = lat;
this.lon = lon;
this.accuracy = acc;
this.time = time;
}
}
我遇到的问题是,除了 iOS 之外,所有平台都可以正常运行。我可以在所有平台上毫无问题地生成我的 XML 文件,但是当我尝试在 iOS 上读取它们时,我收到以下错误:
XmlException:文档元素未出现。第 1 行,位置 1。
在 Mono.Xml2.XmlTextReader.Read () [0x00000] in :0 at System.Xml.XmlTextReader.Read () [0x00000] in :0 at System.Xml.XmlReader.MoveToContent () [0x00000] in :0 at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadRoot () [0x00000] 在 :0 处 System.Xml.Serialization.XmlSerializer.Deserialize (System.Xml.Serialization.XmlSerializationReader 阅读器)[0x00000] 在 :0
关于可能导致此问题的任何建议?
我猜它是 iOS 特有的,因为该解决方案在 Android、独立和编辑器内部都可以正常工作。
编辑- 这是我要解析的 XML 文件:
http://hastebin.com/tilareququ.xml(太长无法直接粘贴)
最后,这是我用来序列化/反序列化的方法:
public static void WriteXML (string fileName, object obj)
{
using (var f = File.Create (fileName)) {
XmlSerializer ser = new XmlSerializer (obj.GetType ());
ser.Serialize (f, obj);
}
}
public static T ReadXML<T> (string fileName)
{
using (var f = File.Open (fileName, FileMode.Open, FileAccess.Read)) {
XmlSerializer ser = new XmlSerializer (typeof(T));
return (T)ser.Deserialize (f);
}
}
【问题讨论】:
-
您可以发布您正在尝试阅读的 xml 文件吗?
-
这里发布太长了,我应该把它存储在某个地方并提供一个链接吗?
-
发布前几行是可以的,或者至少总比没有好,只是为了验证错误是否可能是由 xml 文件本身引起的。此外,带有完整内容的jsfiddle.net 将有助于检查 XML 是否格式错误或类似情况..
-
我遇到了类似的问题。这个问题你解决了吗?
-
我没有,我最终改用了 json 文件。
标签: c# ios unity3d xml-serialization