Stack Overflow的朋友们!我目前正在使用一个名为Oxide的Unity框架,这是无关紧要的。但是,配置助手只允许我序列化对象列表,因为我试图序列化自定义类,所以这并不是很好。我不确定这是否是Json.NET或框架本身的限制。基本上,我正在加载我的自定义类ShopItem的列表作为对象,然后在加载时序列化/读取它(微内核架构)。我希望之后将对象转换回我的课程,尽管它们总是为空。我试过制作一个失败的自定义JsonConverter。这是我目前使用的可怕黑客。
foreach (var shopItem in Instance.Configuration.ItemsToSellToPlayers.Select(x =>
(ShopItem)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(x), typeof(ShopItem))))
这是ShopItem类:
public class ShopItem
{
public int Amount;
public double Price;
public string ShortName;
public ulong SkinId;
public ShopItem()
{
}
public ShopItem(int amount, double price, string shortName, ulong skinId = 0)
{
Amount = amount;
Price = price;
ShortName = shortName;
SkinId = skinId;
}
public Item Create()
{
var item = ItemManager.CreateByName(ShortName, Amount, SkinId);
item.name = $"{item.info.displayName.english} - ${Price}";
return item;
}
}
有没有人建议如何转换
ItemsToBuyFromPlayers = new List<object>
{
new ShopItem(1, 1, "stones"),
new ShopItem(1, 1, "wood")
};
回到我班上的一个实例?
注意:典型的施法((ShopItem)x
)不起作用。
答案 0 :(得分:1)
问题在于:
// you create the List of `object`s
ItemsToBuyFromPlayers = new List<object>
{
new ShopItem(1, 1, "stones"),
new ShopItem(1, 1, "wood")
};
正确的方式:
var shopItems = new List<ShopItem>
{
new ShopItem(1, 1, "stones"),
new ShopItem(1, 1, "wood")
};
var serialized = JsonConvert.SerializeObject(shopItems);
var copyOfShopItems = JsonConvert.DeserializeObject<List<ShopItem>>(serialized);