每次我反序列化配置文件时,barrels的数组为null,我尝试了太多不同的类和代码组合,但是似乎没有任何作用,
我无法列出我在这里使用过的所有不同的序列化类和方法,因为这会占用太多页面,我正在调试该问题的内部版本33,因此应该可以给您一个思路。
XML
<?xml version="1.0" encoding="utf-16"?>
<WeaponEnforcements xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<info>
<Name>Interior_Pulse_Laser_Base_Large</Name>
<TName>Turret</TName>
<AmmoName>Class1LaserBeamCharge</AmmoName>
<ShotSkip>15</ShotSkip>
<Range>100</Range>
</info>
<barrels>
<Barrel>
<BNum>0</BNum>
<FO>0</FO>
<BO>0</BO>
<LO>0</LO>
<RO>0</RO>
<LOff>0</LOff>
<ROff>0</ROff>
<UOff>0</UOff>
<DOff>0</DOff>
</Barrel>
</barrels>
<power>
<defaultScaler>0.005</defaultScaler>
<idleScaler>0.05</idleScaler>
<power>5000</power>
</power>
<heat>
<RHT>15740</RHT>
<HT>450</HT>
<HIPT>10</HIPT>
<RHIPT>10</RHIPT>
<HDPT>30</HDPT>
<RHDPT>80</RHDPT>
<RHID>1</RHID>
<RHDD>300</RHDD>
<HDD>30</HDD>
<HID>0</HID>
<KAC>10</KAC>
</heat>
<damage>
<DamageScaler>0</DamageScaler>
<SplashRadius>0</SplashRadius>
<SplashDamage>false</SplashDamage>
</damage>
<Version>55</Version>
<SenderId>0</SenderId>
</WeaponEnforcements>
序列化类
namespace GCFEnergyWeaponsPlugin.Serialization
{
using System.Collections.Generic;
using System.Xml.Serialization;
[System.Serializable()]
public partial class WeaponEnforcements
{
public Info info { get; set; }
public List<Barrel> barrels = new List<Barrel>();
public Power power { get; set; }
public Heat heat { get; set; }
public Damage damage { get; set; }
public int Version { get; set; }
public int SenderId { get; set; }
}
/// <remarks/>
[System.SerializableAttribute()]
public partial class Info
{
public string Name { get; set; }
public string TName { get; set; }
public string AmmoName { get; set; }
public int ShotSkip { get; set; }
public int Range { get; set; }
}
[System.SerializableAttribute()]
public partial class Barrel
{
public int BNum { get; set; }
public double FO { get; set; }
public double BO { get; set; }
public double LO { get; set; }
public double RO { get; set; }
public float LOff { get; set; }
public float ROff { get; set; }
public float UOff { get; set; }
public float DOff { get; set; }
}
[System.SerializableAttribute()]
public partial class Power
{
public double defaultScaler { get; set; }
public double idleScaler { get; set; }
public int power { get; set; }
}
[System.SerializableAttribute()]
public partial class Heat
{
public int RHT { get; set; }
public int HT { get; set; }
public int HIPT { get; set; }
public int RHIPT { get; set; }
public double HDPT { get; set; }
public double RHDPT { get; set; }
public int RHID { get; set; }
public int RHDD { get; set; }
public int HDD { get; set; }
public int HID { get; set; }
public int KAC { get; set; }
}
[System.SerializableAttribute()]
public partial class Damage
{
public int DamageScaler { get; set; }
public int SplashRadius { get; set; }
public string SplashDamage { get; set; }
}
}
其他信息
storagelocation_string = Path.Combine(folder, selected_type.ToString() + ".cfg");
StringReader xml_config = new StringReader(File.ReadAllText(storagelocation_string));
WeaponEnforcements ConfigData = (WeaponEnforcements)serializer.Deserialize(xml_config);
例外结果是列表/数组中的定义数组(不能使用collect或dictionary,因为这是用于与其他不接受这些类型的应用程序一起使用的插件)
用于将数组/列表读入列表框的代码
foreach (var barrel in ConfigData.barrels)
{
listBox1.Items.Add(barrel.BNum + "," + barrel.FO + "," + barrel.BO + "," + barrel.LO + "," + barrel.RO + "," + barrel.LOff + "," + barrel.ROff + "," + barrel.UOff + "," + barrel.DOff);
}
请记住,配置中的其余数据会正确地反序列化,这只是我遇到问题的桶。
答案 0 :(得分:2)
尝试使用C#中可用的XML属性
对于XML数组使用[XmlArray]
,对于项目使用[XmlArrayItem]
,此
[XmlArray("barrels")]
[XmlArrayItem("Barrel")]
public List<Barrel> barrels{get;set;}
您还可以查看参考上述内容的Microsoft文档