【问题标题】:Deserialize JSON from InfluxDB REST in Unity3d with UnityEngine.JsonUtility使用 UnityEngine.JsonUtility 从 Unity3d 中的 InfluxDB REST 反序列化 JSON
【发布时间】:2019-10-25 14:03:30
【问题描述】:

我在使用 Unity3d 的 JsonUtility 类在 C# 中反序列化来自 influxDB 的 JSON 响应时遇到问题。

我使用 json2csharp.com 来生成我的课程。问题似乎是结果 JSON 字符串中有一个包含对象列表的列表。

这是来自 InfluxDB 的 JSON 结果示例:

{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            "2015-01-29T21:55:43.702900257Z",
                            2
                        ],
                        [
                            "2015-01-29T21:55:43.702900257Z",
                            0.55
                        ],
                        [
                            "2015-06-11T20:46:02Z",
                            0.64
                        ]
                    ]
                }
            ]
        }
    ]
}

这是从 json2csharp 生成的类:

public class Series
{
    public string name { get; set; }
    public List<string> columns { get; set; }
    public List<List<object>> values { get; set; }
}

public class Result
{
    public int statement_id { get; set; }
    public List<Series> series { get; set; }
}

public class RootObject
{
    public List<Result> results { get; set; }
}

我只是不知道如何处理值字段中的List&lt;List&lt;object&gt;&gt;

运行程序时,我得到这个日志输出(这不是示例 JSON,而是来自我的数据库的实际结果,但格式相同):

InfluxResult (
    (List`1) results = List`1<Result> [
        Result (
            (Int32) statement_id = 0;
            (List`1) series = List`1<Series> [
                Series (
                    (String) name = "gf_hallway_temperature";
                    (List`1) columns = List`1<String> [
                        "time",
                        "value",
                    ];
                    (List`1) values = Null;
                ),
            ];
        ),
    ];
)

如果我这样做,它会解析更深一层:

[Serializable]
public class Series
{
    public string name;// { get; set; }
    public List<string> columns; // { get; set; }
    public List<ValueSet> values; // { get; set; }
}

[Serializable]
public class ValueSet
{
    public List<object> values;
}

但这显然只是将值解析为空对象的列表。但它们对应于“值集”列表的正确计数。

我是一个爱好级别的开发人员,所以我可能会错过一些基本的东西。我猜 json2csharp 生成器由于嵌套列表而失败?但是应该如何处理,UnityEngine.JsonUtility 可以吗?此外,“值集”根据数据库的设置方式而有所不同,因此列列表代表值列表和行中每个字段的类型,如果我有意义的话,所以我想必须有一些一种通用对象,我将处理稍后产生的问题。

【问题讨论】:

    标签: c# json rest unity3d influxdb


    【解决方案1】:
    [
                            [
                                "2015-01-29T21:55:43.702900257Z",
                                2
                            ],
                            [
                                "2015-01-29T21:55:43.702900257Z",
                                0.55
                            ],
                            [
                                "2015-06-11T20:46:02Z",
                                0.64
                            ]
                        ]
    

    JSONUtility 无法反序列化。改为使用像 Newtonsoft JSON 这样的专用库来迭代“Json 对象”。

    【讨论】:

    • 谢谢。那正是我所想。找到了一个统一工作的 influx c# 客户端,最终使用了 newtonsoft json,因为无论如何这都是对客户端的依赖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多