我如何在C#中制作格式化的json文件

时间:2019-06-05 00:46:12

标签: c# json

我想用C#制作格式化的json文件。

我想要这样:

{
    "LiftPositioner" : [
        "LiftMax" : 5,
        "LiftMin" : 0
    ], 

    "Temperature" : [
        "CH0_Temp" : 25,
        "CH1_Temp" : 25
    ]
}

但结果是

{
 "LiftMax": 5,
 "LiftMin": 0,
 "CH0_Temp": 25,
 "CH1_Temp": 25
}

这是我的代码:

var json = new JObject();
json.Add("LiftMax", Convert.ToInt32(radTextBox_LiftMax.Text));
json.Add("LiftMin", Convert.ToInt32(radTextBox_LiftMin.Text));

json.Add("CH0_Temp", Convert.ToInt32(radTextBox_CH0.Text));
json.Add("CH1_Temp", Convert.ToInt32(radTextBox_CH1.Text));

string strJson = JsonConvert.SerializeObject(json, Formatting.Indented);
File.WriteAllText(@"ValueSetting.json", strJson);

我需要更改什么代码?

1 个答案:

答案 0 :(得分:1)

无论如何,如果您要运行JsonConvert.SerializeObject,则只需使用值创建一个匿名类型,您可能会更轻松。以下将为您带来理想的结果:

var item = new
{
    LiftPositioner = new[] 
    { 
        new 
        {
            LiftMax = 5,
            LiftMin = 0
        }
    },
    Temperature = new[] 
    {
        new
        {
            CH0_Temp = 25,
            CH1_Temp = 25
        }
    }
};
string strJson = JsonConvert.SerializeObject(item, Newtonsoft.Json.Formatting.Indented);
Console.WriteLine(strJson);

输出以下内容:

{
  "LiftPositioner": [
    {
      "LiftMax": 5,
      "LiftMin": 0
    }
  ],
  "Temperature": [
    {
      "CH0_Temp": 25,
      "CH1_Temp": 25
    }
  ]
}

如果您不想使用LiftPositionerTemperature属性的列表,可以将其简化为:

var item = new
{
    LiftPositioner = 
    new 
    {
        LiftMax = 5,
        LiftMin = 0
    },
    Temperature = 
    new
    {
        CH0_Temp = 25,
        CH1_Temp = 25
    }
};

哪个会产生

{
  "LiftPositioner": {
    "LiftMax": 5,
    "LiftMin": 0
  },
  "Temperature": {
    "CH0_Temp": 25,
    "CH1_Temp": 25
  }
}