我的 JSON 訊息包含字串、串列和嵌套字典的組合,如下所示。
message = {
"series":"A",
"series_color": ["red","blue","green"],
"parts":{"part1":{"id-01":"contextA", "id-02":"contextB", "id-03":"contextC"},"part2":{"id-01":"contextA", "id-02":"contextB", "id-03":"contextC"}}
}
這是在 Unity 的 C# 腳本中收到的,我使用以下命令反序列化:
// Translates Byte into String
var Message = System.Text.Encoding.Default.GetString(e.Message);
// Translates String into Object and stores in Dictionary
Dictionary<string, object> MessageDICT = JsonConvert.DeserializeObject<Dictionary<string, object>>(Message);
從這里我可以列印出前兩條訊息series和series_color.
// Series
object series= MessageDICT["series"];
print(series);
// Series Color
object series_color = (JArray)MessageDICT["series_color"])[0]
print(series_color)
問題出現在我嘗試解壓縮嵌套字典的內容的地方parts,因為我無法解壓縮它,因為它有諸如“{”之類的意外值。
我知道有一些手動方法可以嘗試將“{”替換為“[”并將其用作陣列,以及創建一個類來讀取 JSON(顯示有關 Unity 主執行緒的錯誤)但是這些不是我的解決方案尋找。
有沒有辦法解開所有這些?先謝謝了。
uj5u.com熱心網友回復:
在這種情況下,我建議使用強型別類和 System.Text.Json(或您選擇的序列化庫)來反序列化您的物件。您可以創建如下類:
public class MyClass
{
[JsonPropertyName("series")]
public string Series { get; set; }
[JsonPropertyName("series_color")]
public List<string> SeriesColor { get; set; }
[JsonPropertyName("parts")]
public Dictionary<string, PartsClass> Parts { get; set; }
}
public class PartsClass
{
[JsonPropertyName("id-01")]
public string Id1 { get; set; }
[JsonPropertyName("id-02")]
public string Id2 { get; set; }
[JsonPropertyName("id-03")]
public string Id3 { get; set; }
}
然后你可以像這樣使用序列化器:
var serialized = JsonSerializer.Deserialize<MyClass>(message);
如果“PartsClass”是動態的(即你永遠不知道你可能有多少個 id),那么你可以制作另一個 Dictionary<string, string>
uj5u.com熱心網友回復:
您不需要反序列化 json,您可以使用決議訪問“部分”
var items = JsonConvert.DeserializeObject<Dictionary<string,object>>(json);
var parts = ((JObject)items["parts"]).Properties()
.SelectMany(i => new Dictionary<string, object> { {i.Name,i.Value} })
.ToDictionary(i => i.Key, i=>i.Value );
var part1Id01 = ((JObject) parts["part1"])["id-01"] ; // contextA
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/388617.html
下一篇:處理switch塊內的多個鍵
