Служба REST, которую я использую, RSA Archer ожидает целочисленный ключ, что означает, что я просто не могу вложить объекты [Serializable]
, а затем JsonUtility.ToJson()
, чтобы создать сериализованную строку JSON. Я думал, что нашел решение для создания объекта Dictionary
, а затем использовать ISerializationCallbackReceiver
для обработки только словарной части вложенной структуры, но приведенный ниже код просто игнорирует эту часть вложенного объекта и не сериализует Dictionary
. Есть ли у кого-нибудь мысли о наилучшем подходе к этому?Unity Serializing Nested Dictionary для JSON
Ожидаемый результат:
{"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
@Programmer, поэтому я пытался использовать 'ISerializationCallbackReceiver'. Будет ли более подходящей структура данных? – hotshotiguana
Извините. На самом деле это не помогает. Вероятно, вы должны использовать платный плагин Json, который поддерживает словарь. Это моя рекомендация в вашем случае. – Programmer