簡體   English   中英

使用 UnityEngine.JsonUtility 反序列化 Unity3d 中的來自 InfluxDB REST 的 JSON

[英]Deserialize JSON from InfluxDB REST in Unity3d with UnityEngine.JsonUtility

我在使用 Unity3d 的 JsonUtility class 對 C# 中的 influxDB 的 JSON 響應進行反序列化時遇到問題。

我使用 json2csharp.com 來生成我的 class。 問題似乎是在結果 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 生成的 class :

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<List<object>>

運行程序時,我收到此日志 output (這不是示例 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 可以嗎? 此外,“值集”根據數據庫的設置方式而有所不同,因此列列表表示值列表和行中每個字段的類型,如果我有任何意義的話,所以我想必須有一些一種通用的 object,我將處理稍后產生的問題。

[
                        [
                            "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 對象”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM