【发布时间】:2017-02-08 02:24:34
【问题描述】:
我正在使用的 REST 服务 RSA Archer 需要一个整数键,这意味着我根本无法嵌套 [Serializable] 对象和 JsonUtility.ToJson() 来创建序列化的 JSON 字符串。我想我找到了一个解决方案来创建一个Dictionary 对象,然后使用ISerializationCallbackReceiver 来处理嵌套结构的字典部分,但是下面的代码只是忽略了嵌套对象的那一部分并且不序列化@987654325 @。有没有人对最好的方法有任何想法?
预期输出:
{"Content": {"LevelId": 10,"FieldContents": {"47": {"Type": 1, "Value": "me", "FieldId": 47}}}}
对象结构:
[Serializable]
public class Record
{
public Content Content;
}
[Serializable]
public class Content
{
public int LevelId;
public FieldContents FieldContents;
}
public class FieldContents : ISerializationCallbackReceiver
{
public Dictionary<string, FieldValue> FieldValues;
public List<string> dicKeys;
public List<FieldValue> dicVals;
public void OnBeforeSerialize ()
{
dicKeys.Clear ();
dicVals.Clear ();
foreach (var kvp in FieldValues) {
dicKeys.Add (kvp.Key);
dicVals.Add (kvp.Value);
}
}
public void OnAfterDeserialize ()
{
FieldValues = new Dictionary<string, FieldValue> ();
for (int i = 0; i < Math.Min (dicKeys.Count, dicVals.Count); i++) {
FieldValues.Add (dicKeys [i], dicVals [i]);
}
}
}
[Serializable]
public class FieldValue
{
public int Type;
public string Value;
public int FieldId;
}
JSONUtility 和实例化:
Record newRecord = new Record () { Content = new Content () {
LevelId = 10,
FieldContents = new FieldContents () { FieldValues = new Dictionary<string, FieldValue> () { {
"47",
new FieldValue () {
Type = 1,
Value = "me",
FieldId = 47
}
}
}
}
}
};
Debug.Log (JsonUtility.ToJson (newRecord));
【问题讨论】:
-
Unity 的
JsonUtility不支持字典。 -
@Programmer 这就是我尝试使用
ISerializationCallbackReceiver的原因。其他数据结构在这里更合适吗? -
对不起。这点实在是帮不上忙。您可能应该使用支持 Dictionary 的付费 Json 插件。这是我对你的建议。
-
我正在使用 newtonsoft。免费而且很棒。将其导入统一有点麻烦
标签: c# json unity3d serialization archer