Der REST-Dienst, den ich benutze RSA Archer, erwartet einen Integer-Schlüssel, was bedeutet, ich kann [Serializable]
Objekte einfach verschachteln und dann JsonUtility.ToJson()
, um die serialisierte JSON-Zeichenfolge zu erstellen. Ich dachte, ich fand eine Lösung, um ein Dictionary
Objekt zu erstellen und dann ISerializationCallbackReceiver
zu verwenden, um nur das Wörterbuch Stück der verschachtelten Struktur zu behandeln, aber der folgende Code ignoriert einfach den Teil des verschachtelten Objekts und serialisiert das Dictionary
nicht. Hat jemand irgendwelche Gedanken über den besten Ansatz dazu?Unity Serialisierung geschachtelte Dictionary zu JSON
Erwartete Ausgabe:
{"Content": {"LevelId": 10,"FieldContents": {"47": {"Type": 1, "Value": "me", "FieldId": 47}}}}
Objektstruktur:
[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 und Instanziierung:
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's 'JsonUtility' unterstützt ** nicht **. – Programmer
@Programmierer deshalb habe ich versucht, 'ISerializationCallbackReceiver' zu verwenden. Wäre hier eine andere Datenstruktur sinnvoller? – hotshotiguana
Entschuldigung. Wirklich kann hier nicht helfen. Sie sollten wahrscheinlich ein kostenpflichtiges Json-Plugin verwenden, das Dictionary unterstützt. Das ist meine Empfehlung in Ihrem Fall. – Programmer