代码之家  ›  专栏  ›  技术社区  ›  Sachith Wickramaarachchi

如何从JSON模型访问值

  •  1
  • Sachith Wickramaarachchi  · 技术社区  · 6 年前

    在这段代码中,我将值设置为 JSON 调用的文件 myJson .code工作正常,值绑定到模型类没有任何问题。我的代码如下。

    class Program
    {
    
        static void Main(string[] args)
        {
             ReadJson();
        }
    
        public static string ReadJson()
        {
            string case20 = "this is 20", case40 = "this is 40";
            string json;
            using (StreamReader r = new StreamReader(@"C:\Users\HP\Desktop\Output\myJson.json"))
            {
                json = r.ReadToEnd();
            }
            MyClass response = JsonConvert.DeserializeObject<MyClass>(json);
            var dropDowns = response;
            string jsonDropdown = JsonConvert.SerializeObject(dropDowns, Formatting.Indented);
            return "";
        }
    }
    

    以下是我的模特课程:

    public class Customer
    {
        public int RATE { get; set; }
        public int FEE { get; set; }
        public int PERIOD { get; set; }
    
        public string NewValue
        {
            get
            {
                var rateVal = this.RATE;
                switch (rateVal)
                {
                    case 20:
                        return ""; // Here, I need to get value from the ReadJson method to return (value of case20)
                    case 40:
                        return ""; // Here, I need to get value from the ReadJson method to return (value of case40)
                }
                return "test";
            }
        }
    }
    
    public class MyClass
    {
        public string StatusCode { get; set; }
        public Customer Customer { get; set; }
        public object LoanDetail { get; set; }
    }
    

    在我将值设置为模型类之后,从 Customer 我想查一下 RATE 为了 费率 我想返回 case20 case40 变量在 ReadJson() 方法。我如何才能访问这些值表单 顾客 上课。

    提前谢谢!!!

    更新时间:

    这是样品 JSON格式 一串

    {
       "StatusCode": "100",
       "Customer": {
          "RATE": 20,
          "FEE": 3000,
          "PERIOD": 60,
          "NewValue":""
       },
       "LoanDetail": null
    }
    

    根据belove JSON字符串,我的输出应该是

    {
       "StatusCode": "100",
       "Customer": {
          "RATE": 20,
          "FEE": 3000,
          "PERIOD": 60,
          "NewValue":"this is 20"
       },
       "LoanDetail": null
    }
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Slipoch    6 年前

    函数正在将JSON数据从字符串读取到customer对象中。

    case20和case40不应该设置在客户对象或程序本身中吗?

    您没有从JSON中读取case20或40个字符串。因此,我假设它们的输出在运行程序时不会动态变化。

    还有你的 var rateVale = this.rate; 应该有点像 var rateVal = int.Parse(this.rate); 当你把它作为一个整数来比较时。或开关箱应为“20”而不是20等。

    您能否提供一个您拥有的代码示例,以及应该是什么样的对象值以及newValue参数的输出?

        2
  •  1
  •   Emre Savcı    6 年前

    根据下面的内容更改代码,它就可以满足您的要求。但我仍然不明白为什么你需要NewValue属性而你已经有了RATE属性。它们的价值不一样吗?你是根据价格来设定新价值的,为什么不在任何地方都使用价格呢?

        public static string ReadJson()
        {
            string json = File.ReadAllText(@"C:\Users\HP\Desktop\Output\myJson.json");
    
            MyClass response = JsonConvert.DeserializeObject<MyClass>(json);
    
            return JsonConvert.SerializeObject(response, Formatting.Indented);
        }
    
    public class Customer
    
    {
        public int RATE { get; set; }
        public int FEE { get; set; }
        public int PERIOD { get; set; }
    
        public string NewValue
        {
            get
            {
                switch (RATE)
                {
                    case 20:
                        return "this is 20";
                    case 40:
                        return "this is 40";
                    default:
                        return "";
                }
            }
        }
    }
    
    public static void Main(string[] args)
    
        {
            Console.WriteLine(ReadJson());
        }
    

    输出为:

    {
      "StatusCode": "100",
      "Customer": {
        "RATE": 20,
        "FEE": 3000,
        "PERIOD": 60,
        "NewValue": "this is 20"
      },
      "LoanDetail": null
    }
    
        3
  •  0
  •   Sachith Wickramaarachchi    6 年前

    感谢所有帮助我解决这个问题的人。我找到了解决问题的办法。

    我创建了一个静态类,称为 TestCase .

    public static class TestCase
    {
        public static string case20 { get; set; }
        public static string case40 { get; set; }
    }
    

    然后将这些值设置为 ReadJson()

    public static string ReadJson()
    {
        TestCase.case20 = "this is 20";
        TestCase case40 = "this is 40";
        // same code has beign used....
    }
    

    然后在 Customer 类,我按如下方式访问这些值。

    public class Customer
    
    {
        public int RATE { get; set; }
        public int FEE { get; set; }
        public int PERIOD { get; set; }
    
        public string NewValue
        {
            get
            {
                switch (RATE)
                {
                    case 20:
                        return TestCase.case20;
                    case 40:
                        return TestCase.case40;
                    default:
                        return "";
                }
            }
        }
    }