使用Json.NET将对象转换回类

时间:2017-12-12 02:45:58

标签: c# json casting json.net

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)不起作用。

1 个答案:

答案 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);