4 回答

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;
}
}

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));
}
}
}

TA贡献1827条经验 获得超4个赞
您的代码有一些问题:
您需要为类提供默认构造函数(这是由于序列化程序如何处理类型 - 它们不会理解您的特定于类的参数化构造函数)。
您的字段需要是可设置的属性(只需添加就
{get;set;}
可以了)。我建议您使用来装饰
parameters
属性[JsonProperty("part_parameters")]
以获得您期望的反序列化行为。
- 4 回答
- 0 关注
- 137 浏览
添加回答
举报