C# Firebase Android:在Android 4.2.2上未正确序列化子JSON数组

C# Firebase Android:在Android 4.2.2上未正确序列化子JSON数组,c#,arrays,json,serialization,firebase,C#,Arrays,Json,Serialization,Firebase,我正在序列化一个Party对象,如下所示: public class Party { public long lastPing; public string id; public int ownerId; public List<PartyPlayer> players; public int status; public long created; public long lastServerUpdate; publi

我正在序列化一个Party对象,如下所示:

public class Party {
    public long lastPing;
    public string id;
    public int ownerId;
    public List<PartyPlayer> players;
    public int status;
    public long created;
    public long lastServerUpdate;
    public int balance;
    public int size;
    public PartyCharacter character;
    public string mmcId;
}
public void AddOrUpdateParty(Dictionary<string,object> d) {
    string dSer = JsonConvert.SerializeObject (d);
    Debug.Log ("Serialized object: " + dSer);
}
但是,当我在Android 4.2.2上运行相同的代码时,players对象不是有效的JSON数组,而是将数组序列化为一个巨大的字符串:

{"id":"key_test","players":"[{id=467, lastPing=1461555567191, name=dragonfly467, character={id=1049, experience=0, visibleSkills=[1, 2, 3], level=1, visibleItems=[4, 0, 0], type=1}}]"}
下面是从firebase获取值的C#包装器:

public string StringValue
{
    get 
    {
        AndroidJavaObject javaObject = getJavaObject ().Call<AndroidJavaObject> ("getValue");
        return javaObject != null ? javaObject.Call<string> ("toString") : string.Empty;
    }
}
现在您可以执行以下操作:

JsonConvert.DeserializeObject<Party> (JsonEditor.recursiveQuotes(d));
JsonConvert.DeserializeObject(JsonEditor.recursiveQuotes(d));

谢谢

您是否有可能为您的
列表安装了
类型转换器
?如果你这样做会发生什么?@dbc你是说TypeDescriptor.GetConverter(d[“players”],  是的)?在这种情况下,d是一本字典。我将粘贴整个函数。您能否显示您从服务器接收到的JSON,以及您最初是如何将其反序列化到字典的?@dbc进行了一些挖掘,发现有一个名为MiniJSON的隐藏的底层JSON库正在进行反序列化。似乎更可能的错误是发生在那里。您是否有可能为您的
列表安装了
类型转换器
?如果你这样做会发生什么?@dbc你是说TypeDescriptor.GetConverter(d[“players”],  是的)?在这种情况下,d是一本字典。我将粘贴整个函数。您能否显示您从服务器接收到的JSON,以及您最初是如何将其反序列化到字典的?@dbc进行了一些挖掘,发现有一个名为MiniJSON的隐藏的底层JSON库正在进行反序列化。似乎更可能的错误是发生在那里。我会随时通知你的。
class JsonEditor {
    public static String recursiveQuotes(string s) {
        string[] stringify = new string[]{ "id","name", "mmcId", "currentMatch"}; // we have to add the search terms because strings can contain int values and they are impossible to identify by checking the value.
        string searchTerm = null;
        foreach(string check in stringify) {
            if (s.Contains (check+"=")) { // we also replace = with :, so check+= is confirmation there are untouched strings.
                searchTerm = check;
            } 
        }
        if (searchTerm != null) {
            // find the search term and the value that follows it, then replace the value with string quotes

            string searchArea = s.Split(new string[]{searchTerm+"="}, StringSplitOptions.None)[1];
            string value = searchArea.Split (',') [0];
            if(value.Contains("}")) {
                value = searchArea.Split('}')[0];
            }
            string replaceTerm = searchTerm + "=" + value;
            string newTerm = searchTerm + ":\"" + value + "\"";
            s = s.Replace (replaceTerm, newTerm);
            return recursiveQuotes (s);
        } else {
            return s.Replace("=",":").Replace("\"[", "[").Replace("]\"", "]");
        }
        return s;
    }
}
JsonConvert.DeserializeObject<Party> (JsonEditor.recursiveQuotes(d));