将json反序列化为C#类的方法不适用。

问题描述 投票:-1回答:1

使用Nwetonsoft dll

JSON格式

{
   "PersistData":{
        "method":["SetColorPersist","SetColorPersist","SetColorPersist"],
        "per":["BF0ECF","78F77A","0918B8"],
        "Source":["0","0","0"]}
}

C#类

[Serializable]
 public class PersistData
    {
        [SerializeField]
        public string[] Method;
        [SerializeField]
        public string[] Per;
        [SerializeField]
        public string[] Source;
    }

反序列化

public PersistData persistObj = new PersistData();
string json = Obj.data.ToString();
persistObj = JsonConvert.DeserializeObject<PersistData>(json);

尝试使用unity jsonutility,它不支持数组JSON.newton JSON,没有将JSON反序列化为Class

请提供一些解决方案,我可以让它工作。我主要尝试了所有的解决方案。

c# json unity3d json.net
1个回答
2
投票

你应该添加外类OutPersistData来包装PersistData,像这样

class OutPersistData
{
    public PersistData PersistData { get; set; }
}

然后将OutPersistData反序列化为一个对象。

var persistObj = JsonConvert.DeserializeObject<OutPersistData>(json);

应该可以用。


0
投票

因为json的层次结构不正确,如果你想使用 PersistData 作为Deserialize目标,在json中加入外链注解就可以了。

{
    "method":["SetColorPersist","SetColorPersist","SetColorPersist"],
    "per":["BF0ECF","78F77A","0918B8"],
    "Source":["0","0","0"]
}

或者,你也可以创建外层类来封装这个类。PersistData然后你可以使用origin json内容来反序列化。

外层类.cs

public class OuterClass
{
    public PersistData PersistData { get; set; }
}

记得将反序列化目标改为 OuterClass 如果你选择二级方案。

var outerClass = JsonConvert.DeserializeObject<OuterClass>(json);

© www.soinside.com 2019 - 2024. All rights reserved.