首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何避免使用JSON反序列化和复杂工厂模式的重复数组

如何避免使用JSON反序列化和复杂工厂模式的重复数组
EN

Stack Overflow用户
提问于 2022-09-01 05:32:35
回答 1查看 38关注 0票数 0

我正在工作一个有趣的边项目,制作一个文本为基础的冒险游戏和引擎。我想把游戏的内容都写成json。我想将这些json文件输入到一系列工厂中,这些工厂在游戏世界启动时实例化游戏世界。

让我举一个例子:

客房课程:

代码语言:javascript
复制
public class Room{
    public List<Item> Items;
    public List<string> ItemStrings;
    public string Description;

    public void AddRoom(Room room){
        Items.Add(room);
    }
}

项目类别:

代码语言:javascript
复制
public class Item{
    string Name;
    string Description;
}

Json档案:

treasureRoom.json

代码语言:javascript
复制
{
  "ItemStrings": [
    "pie",
    "shoe"
  ],
  "Description": "A Fancy Room",
}

pie.json

代码语言:javascript
复制
{
  "Name" : "pie",
  "Description": "its a pie",
}

shoe.json

代码语言:javascript
复制
{
  "Name" : "shoe",
  "Description": "its a shoe",
}

工厂级:

代码语言:javascript
复制
public static Room MakeRoom(string roomName)
    {
        var room = JsonConvert.DeserializeObject<Room>(Util.Readfile($"{basePath}/GameObjects/Rooms/{roomName}.json"));
        foreach(var item in room.ItemStrings)
        {
            room.AddItem(Factory.MakeItem(item));
        }
        return room;
    }

public static Item MakeItem(sting fileName){
    return JsonConvert.DeserializeObject<Item>(Util.Readfile($"{basePath}/GameObjects/Items/{itemName}.json"));
}

现在,我不喜欢我的Room对象需要同时拥有ItemsItemStrings这一事实--我想把ItemStrings从Room类中删除,我想知道给出这个配置的最佳方法是什么。

假设我正在打电话给Factory.MakeRoom("treasureRoom");

EN

回答 1

Stack Overflow用户

发布于 2022-09-01 21:54:03

我很确定我渴望的是对JSONConverter逻辑的重写,如这里所解释的:https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-converters-how-to?pivots=dotnet-6-0

我会回来更新这个答案,一旦我有一个工作的例子。但我有99%的把握,这是我的要求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73564641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档