RSA Archer가 사용하는 REST 서비스는 정수 키가 필요합니다. 즉, [Serializable]
개체를 중첩 할 수없고이어서 JsonUtility.ToJson()
을 직렬화 할 수 없기 때문입니다. Dictionary
개체를 만들고 나서 ISerializationCallbackReceiver
을 사용하여 중첩 된 구조체의 사전 조각을 처리하는 솔루션을 찾았지만 아래 코드는 중첩 된 개체의 해당 부분을 무시하고 Dictionary
을 직렬화하지 않습니다. 누구든지 이것에 대한 최선의 접근법에 대한 생각을 갖고 있습니까?Unity가 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