第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 C# 在 Unity 中解析復(fù)雜的 JSON 對象

如何使用 C# 在 Unity 中解析復(fù)雜的 JSON 對象

C#
UYOU 2022-01-16 19:53:23
^--- 對于斷言問題只是重復(fù)的斷言的反駁,請參見底部的注釋。劇透:根據(jù) carldevelopsforcoffee 接受的有效答案,請參閱問題底部的最終代碼。原始問題:我正在嘗試使用 UnityEngine.JsonUtility.FromJson() 在 Unity(2018.1,VS2015,如果重要)中使用 C# 解析復(fù)雜的 JSON 文件(見下文)。解析器代碼如下所示。頂級變量(sweepIndex、totalRadials 等)都可以很好地解析到 Sweep 對象中,但“radials”數(shù)組似乎被跳過了(Sweep 中的 Radial 對象列表最終為空)。如果從 JSON 中不明顯,它具有以下結(jié)構(gòu):具有 13 個簡單值和一組 Radial 對象的頂級“Sweep”對象。List 中的每個 Radial 對象都有 4 個簡單值和一個雙精度數(shù)組格式化 JSON 以說明結(jié)構(gòu):(為清楚起見,已編輯和截斷......完整的 JSON 是下面類中的字符串){"sweepIndex":0,"totalRadials":720,"beamWidth":0.949999988079071,"startingUnixtime":1536864392000,"endingUnixtime":1536863574000,"totalGatesPerRay":1832,"gateDepthMeters":250.0,"distanceToFirstGateMeters":2125.0,"meanElevationDeg":0.5275726318359375,"originLatitude":33.989444444444445,"originLongitude":-78.42888888888889,"originAltitude":20.0,"deviantOriginCount":0,"radials": [    {"radialNumber":0,"azimuthDeg":263.21319580078125,"elevationDeg":0.53009033203125,"duration":66521592,        "gateIntensity":[-5.5,-1.0,1.0,3.0,13.5,-15.0,-13.0,-11.5,-10.5,-7.5]},    {"radialNumber":1,"azimuthDeg":263.7432861328125,"elevationDeg":0.5328369140625,"duration":66521616,        "gateIntensity":[-9.5,-1.0,-4.5,-2.5,5.0,-4.0,9.0,-8.5,-1.5,-9.0]}]}我是生成 JSON 文件的人(使用 Netcdf-Java 吸入原始的 2 級雷達數(shù)據(jù)并將其作為 JSON 吐出以供 Unity 應(yīng)用程序使用),所以如果 JSON 極大地改善了我的生活,我可能會更改它更容易......但我真的更喜歡不大幅改變整體結(jié)構(gòu)(使用帶有雙精度數(shù)組的徑向?qū)ο髷?shù)組的掃描對象)。筆記:用戶“程序員”表示這是一個所謂的重復(fù)的問題的答案實際上并不能解決我所說的問題 - Unity中的復(fù)雜JSON 。它確定 Unity 內(nèi)置的 JsonUtility 類不足以解析復(fù)雜的 JSON,同時沒有提供真正的替代方案。關(guān)于將第三方 Json 庫與 C# 一起使用的問題存在于 SO 上……但在 Unity 項目中使用第三方庫和 C#如果它們尚未作為 .unitypackage 提供,則它們的任務(wù)更加困難和具體,特別是如果它最終需要能夠在 Windows 以外的平臺上運行(例如,Android、Magic Leap、Oculus 等)。這就是為什么這個問題的公認答案很有價值,并為 SO 作為一種資源增加了具體價值......它確定了一個解決問題的三個具體問題的解決方案——復(fù)雜的 Json、C#,并讓它在 Unity 中的平臺中工作-不可知論的方式。
查看完整描述

3 回答

?
湖上湖

TA貢獻2003條經(jīng)驗 獲得超2個贊

復(fù)制粘貼你的 json 和http://json2csharp.com/


你會得到這個:


public class Radial

{

    public int radialNumber { get; set; }

    public double azimuthDeg { get; set; }

    public double elevationDeg { get; set; }

    public int duration { get; set; }

    public List<double> gateIntensity { get; set; }

}


public class RootObject

{

    public int sweepIndex { get; set; }

    public int totalRadials { get; set; }

    public double beamWidth { get; set; }

    public long startingUnixtime { get; set; }

    public long endingUnixtime { get; set; }

    public int totalGatesPerRay { get; set; }

    public double gateDepthMeters { get; set; }

    public double distanceToFirstGateMeters { get; set; }

    public double meanElevationDeg { get; set; }

    public double originLatitude { get; set; }

    public double originLongitude { get; set; }

    public double originAltitude { get; set; }

    public int deviantOriginCount { get; set; }

    public List<Radial> radials { get; set; }

}

然后你可以使用 JsonUtility 但你首先需要修改一些內(nèi)容。將 Serializable 屬性添加到每個類并刪除屬性擴展以生成這些基本變量。


[Serializable]

public class Radial

{

    public int radialNumber;

    public double azimuthDeg;

    public double elevationDeg;

    public int duration;

    public List<double> gateIntensity;

}

[Serializable]

public class RootObject

{

    public int sweepIndex;

   // same with all following items

}

RootObject 是您的 json 的頂級類,它在 json 中沒有名稱,因此會生成默認值。您可以將 RootObject 更改為您想要的任何內(nèi)容,例如 JsonResponse?,F(xiàn)在可以像這樣使用了:


void Start()

{

     string json = GetJsonFile(); // From download or text file

     RootObject ro = JsonUtility.FromJson<RootObject>(json);

     print( ro.radials[0].radialNumber); 

}


查看完整回答
反對 回復(fù) 2022-01-16
?
茅侃侃

TA貢獻1842條經(jīng)驗 獲得超22個贊

我在 Unity 中將JsonFx用于我的數(shù)據(jù)類。


示例類:


using JsonFx.Json;


[Serializable]

[JsonName("MyData")]

public class MyData

{

    public int id;

    public string name;

    public int[] stuff;

}

示例 json:


{

    "__Type": "MyData, Assembly-CSharp",

    "id": 1,

    "name": "new_data",

    "stuff" :

       [

         0,

         1,

         2

        ]

 }

從 json 創(chuàng)建數(shù)據(jù)對象:


// Json to MyData object: 

// Assume I downloaded a json file

string jsonData = System.Text.Encoding.UTF8.GetString (www.bytes);

jsonData = jsonData.Trim ();

MyData data = MyData.Deserialize(jsonData);

從數(shù)據(jù)對象創(chuàng)建 json 文件


// MyData object to Json

// Use MyData data object

string file = "mydata.json";

JsonWriterSettings settings = new JsonWriterSettings ();

settings.PrettyPrint = true;

settings.TypeHintName = "__Type";


JsonWriter writer = new JsonWriter (file, settings);

writer.Write (data);

writer.TextWriter.Flush ();

writer.TextWriter.Close ();


查看完整回答
反對 回復(fù) 2022-01-16
?
慕標5832272

TA貢獻1966條經(jīng)驗 獲得超4個贊

例如,有一個在線服務(wù)可以自動從 Json 轉(zhuǎn)換為 Poco

在 VisualStudio 中,還有一個菜單可以執(zhí)行此操作:

http://img1.sycdn.imooc.com//61e4078a000197b705680348.jpg

查看完整回答
反對 回復(fù) 2022-01-16
  • 3 回答
  • 0 關(guān)注
  • 371 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號