上一些Android設備提供接口應用中旬我們正在使用C#和JsonFX某些Android設備經歷Unity3D的問題(的Nexus 10,Galaxy Note的3(SM-N9005, SM-N9000Q),Galaxy Tab,S4(SGH-I337,SGH-M919,GT-I9505),Galaxy Note 10.1(SM-P600,SM-P601),HTC One)。詞典<字符串,字符串>枚舉停止在Unity3D
在我們的應用程序的啓動任何字典<字符串,字符串>連載使用JsonFX將正確生成一個字符串,但在某些時候變得壞了,從此會拋出一個JsonSerializationException以下消息:
Error JsonSerializationException: Types which implement Generic IDictionary<TKey, TValue> must have an IEnumerator which implements IDictionaryEnumerator. (System.Collections.Generic.Dictionary`2[System.String,System.String])
經過調查我們發現,一些未知事件之前下面的代碼(這是JsonFX詞典流程的簡化)...
var myDictionary = new Dictionary<string, string> {
{ "key1", "value1" },
{ "key2", "value2" },
};
IEnumerator enumerator = ((IEnumerable)((IDictionary)myDictionary)).GetEnumerator();
IDictionaryEnumerator dictionaryEnumerator = enumerator as IDictionaryEnumerator;
...成功獲取該類型的字典枚舉:
System.Collections.Generic.Dictionary`2+Enumerator[[System.String, mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], Dict Enumerator Path 1 = System.Collections.Generic.Dictionary`2+Enumerator[[System.String, mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]
一旦打破它,而不是沒有買到字典枚舉,因爲它返回的枚舉的類型爲:
System.Collections.Generic.Dictionary`2+KeyCollection[System.String,System.String]
有趣我們已經嘗試在開始時構建一個字典,並通過我們的遊戲流程重新測試相同的實例,即使在這種情況下,它也會在發生錯誤後停止序列化。
值得注意的是,這隻對字典<打破字符串,字符串> - 我們與字典<字符串,對象>運行相同的測試,他們繼續返回預期的枚舉類型。儘管在我們的遊戲流程中進行了亂拋垃圾的測試和日誌記錄,但我們無法確切地確定,其中這變得中斷,因爲它似乎在協程的更新之間斷開。
我們試過的bug前後傾倒加載的程序集,試圖趕上依賴性變化版本,但沒有差異。
這個問題已經由一個無辜的看着數據出臺只能改變,所以我們懷疑其暴露的現有問題,它提高了我們的日文字符的支持。
我們通過修復Json庫的字典解析來支持這個新案例,但我們更擔心導致這個潛在問題的原因以及它可能導致我們沒有注意到的其他問題然而。
任何一個在有道詞典的或其他集合類的行爲改變了這個樣子,或者有建議我們如何進一步追查什麼原因造成的問題,看到了類似的問題?
同樣的問題在這裏,沒有解決方案呢。奇怪的是,它似乎取決於設備,不一定是Android操作系統版本。仍在調查... – derFunk
今天我一直在使用MiniJSON和脫機字節碼選項(Unity Pro)有類似的問題。關於這個問題的更多信息:http://forum.unity3d.com/threads/168019-quot-System-String-doesn-t-implement-interface-System-Collections-IEnumerator-quot-crash – frarees
感謝@farees的鏈接。有趣的是,他表示它是由iOS AOT問題引起的,因爲我意識到這些問題(因爲它還經歷了一個隨機的實時問題),但我們能夠排除它,因爲它只在Android設備上發起,而不是使用AOT。 – Sassy