亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

在 C# 中反序列化 JSON 文件

在 C# 中反序列化 JSON 文件

C#
ibeautiful 2022-10-23 16:27:43
我不斷收到以下錯誤:你調用的對象是空的這是我在 C:\part_param.json 文件中的 Json 字符串{        "part_parameters" : {        "bar_diameter" : 300.4,        "core_height" : 132,       "roughing_offset" : 0.3        } }我使用的代碼如下:    public class PLMpartParameter    {        public class Parameters        {            public float bar_diameter;            public float core_height;            public float roughing_offset;            public Parameters(float barD, float coreH, float roughingO)            {                bar_diameter = barD;                core_height = coreH;                roughing_offset = roughingO;            }        }        public Parameters parameters;        public PLMpartParameter(Parameters param)        {            parameters = param;        }    }    public static void LoadJson()    {        using (System.IO.StreamReader r = new System.IO.StreamReader(@"C:\part_param.json"))        {            string json = r.ReadToEnd();            _logger.Info(string.Format("Read entire file complete. File Values: {0}", json));            try            {                PLMpartParameter part = Newtonsoft.Json.JsonConvert.DeserializeObject<PLMpartParameter>(json);            }            catch (Exception e)            {                _logger.Info(string.Format("Read Json failed {0}", e.Message));            }        }我在這里想念什么?
查看完整描述

4 回答

?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

我認為問題在于您的屬性稱為“參數”,但在您的 json 中它是“part_parameters”。



查看完整回答
反對 回復 2022-10-23
?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

您必須在屬性上方添加 JSON 屬性,以便在反序列化對象時識別您的屬性。


你會在下面找到一個例子


public class Parameters

{

    [JsonProperty("bar_diameter")]

    public float bar_diameter;

    [JsonProperty("core_height")]

    public float core_height;

    [JsonProperty("roughing_offset")]

    public float roughing_offset;


    public Parameters(float barD, float coreH, float roughingO)

    {

        bar_diameter = barD;

        core_height = coreH;

        roughing_offset = roughingO;

    }

}


查看完整回答
反對 回復 2022-10-23
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

引用 Prasad Telkikar 的回答,因為它馬上就解決了


使用 json2csharp 為您的 json 文件獲取模型,然后反序列化您的 json。您可以在構建功能中使用 Visual Studio 來創建類,即編輯 -> 特殊粘貼 -> 將 JSON 粘貼為類


這是上課


> public class PartParameters {

>     public double bar_diameter { get; set; }

>     public int core_height { get; set; }

>     public double roughing_offset { get; set; } }

> public class RootObject {

>     public PartParameters part_parameters { get; set; } }

要反序列化,請使用以下代碼


PLMpartParameter 部分 = Newtonsoft.Json.JsonConvert.DeserializeObject(json);


我的最終代碼看起來像這樣,它的工作原理!


    public class PartParameters

    {

        public double bar_diameter { get; set; }

        public int core_height { get; set; }

        public double roughing_offset { get; set; }

    }


    public class RootObject

    {

        public PartParameters part_parameters { get; set; }

    }


    public static void LoadJson()

    {

        using (System.IO.StreamReader r = new System.IO.StreamReader(@"C:\part_param.json"))

        {

            string json = r.ReadToEnd();

            try

            {

                RootObject part = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(json);


                _logger.Info(string.Format("list values : bardiameter: {0}, coreHeight: {1}, roughingOffset: {2}", 

                    part.part_parameters.bar_diameter,part.part_parameters.core_height, part.part_parameters.roughing_offset));

            }

            catch (Exception e)

            {

                _logger.Info(string.Format("Read Json failed {0}", e.Message));

            }


        }


    }


查看完整回答
反對 回復 2022-10-23
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

您的代碼有一些問題:

  1. 您需要為類提供默認構造函數(這是由于序列化程序如何處理類型 - 它們不會理解您的特定于類的參數化構造函數)。

  2. 您的字段需要是可設置的屬性(只需添加就{get;set;}可以了)。

  3. 我建議您使用來裝飾parameters屬性[JsonProperty("part_parameters")]以獲得您期望的反序列化行為。


查看完整回答
反對 回復 2022-10-23
  • 4 回答
  • 0 關注
  • 173 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號