如何使用JsonUtility(unity c#)使用任意字符串键反序列化json?

时间:2016-10-23 15:17:25

标签: c# json serialization unity3d deserialization

Unity,c#,使用JsonUtility。 假设我有一个json字符串,如下所示:

{
    "1,1":"dd",
    "2,1":"abc",
    "2,2":"123"
}

密钥的数量和内容是任意的。如何使用JsonUtility.FromJson<>()将此json反序列化并传输到我自己的类?

如果键是固定的,那么我知道你可以创建一个带有键名称的变量的类。如果键是任意的,该怎么办?

2 个答案:

答案 0 :(得分:0)

使用任意键反序列化数据的最简单方法是使用可以保存任意键的数据类型,例如字典。

在c#中它将如下所示,但我认为JsonUtility应该可以做同样的事情。

var input = "{\"1,1\":\"dd\",\"2,1\":\"abc\",\"2,2\":\"123\"}";
var dictionary = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Dictionary<string, string>>(input);

这将导致:

{[1,1, dd]}
{[2,1, abc]}
{[2,2, 123]}

请记住,这只有在您可以保证json数据集中的唯一键时才有效。

一旦您反序列化了数据,您可以随时将其转换为其他类型/类。

答案 1 :(得分:0)

仍然没有找到办法做到这一点。解决方法:更改JSON结构以避免使用任意键的字典。 问题中提到的字典可以改为:

[
    {"key":"1,1","value":"dd"},
    {"key":"2,1","value":"abc"},
    {"key":"2,2","value":"123"}
]