我一直收到以下错误:
对象引用未设置为对象的实例
这是我在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));
}
}
我在这里想念什么?
答案 0 :(得分:2)
我认为问题在于您的属性称为“参数”,但在json中为“ part_parameters”。
答案 1 :(得分:1)
立刻引用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 part = 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));
}
}
}
答案 2 :(得分:1)
必须在属性上方添加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;
}
}
答案 3 :(得分:0)
您的代码有一些问题:
{get;set;}
,您就可以使用了)。 parameters
装饰[JsonProperty("part_parameters")]
属性以进行反序列化
您期望的行为。