【发布时间】:2018-11-05 09:41:56
【问题描述】:
我正在开发一个游戏,它有一个名为UserInfo 的类。
在UserInfo 类中有一个public List<Lineup> lineups 变量。
而Lineup 包含public Dictionary<Vector2Int, Collection> cardLocations。
我的问题是,JsonConvert.SerializeObject 确实正确地产生了我想要的结果,但是当我做 JsonConvert.DeserializeObject<UserInfo> 时,Vector2Int 仍然是像 "(x, y)" 这样的字符串。
我应该如何解决它?
我写了一个JsonConverter来转换它,并使用了
JsonConvert.SerializeObject(userInfo, Formatting.Indented, new Vec2Converter())
用于序列化和
JsonConvert.DeserializeObject<UserInfo>(json, new Vec2Converter())
去反序列化,但它不起作用。
这是我的JsonConverter 脚本:
using Newtonsoft.Json;
using UnityEngine;
using System;
public class Vec2Converter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(value.ToString());
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var vector2Int = serializer.Deserialize<Vector2Int>(reader);
Debug.Log(vector2Int);
return vector2Int;
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Vector2Int);
}
}
另一个奇怪的事情是,当我尝试将Vector2Int 更改为Lineup 或Dictionary<Vector2Int, Collection> 等其他数据结构时,单击播放时Unity 退出了。我改回来之后就没事了。 ok 表示它没有退出,但仍然给我错误消息。
忘记放错误信息:ArgumentException: Could not cast or convert from System.String to UnityEngine.Vector2Int
这是课程。
public class UserInfo {
public string username;
public int playerID;
public List<Collection> collection = new List<Collection>();
public List<Lineup> lineups = new List<Lineup>(); // Here is the problem
public Dictionary<string, int> contracts = new Dictionary<string, int>();
public int coins = 0;
public int rank = 0;
public int lastLineupSelected = -1;
public int winsToday = 0;
public Stats total = new Stats();
public Dictionary<string, Stats> boardResults = new Dictionary<string, Stats>();
public List<Mission> missions;
public string preferredBoard = "Standard Board";
public string lastModeSelected = "";
public int gameID;
public bool missionSwitched = false;
}
public class Lineup
{
public Dictionary<Vector2Int, Collection> cardLocations; // Here is the problem
public List<Tactic> tactics;
public string boardName;
public string lineupName;
public string general;
public bool complete;
}
public class Collection
{
public string name = "";
public string type = "";
public int count = 1;
public int health = 0;
public int oreCost = 0;
}
【问题讨论】:
-
然后手动解析字符串,创建想要的类型。
-
@Nkosi 你能更具体一点吗?如何创建所需的类型?
-
@dbc 我的情况有点不同。他们只是在转换字典,但我正在做一个具有包含字典的数据结构的数据结构。而且 Vector2Int 是一个统一的内置数据类型,我无法修改。
-
您必须发布您尝试序列化的类(UserInfo)。你还没有这样做。您还必须展示如何初始化变量。
标签: c# unity3d serialization json.net