【发布时间】:2017-10-16 20:27:26
【问题描述】:
我正在尝试使用 Newtonsoft.Json 反序列化此 JSON:
[
{
"name": "New cheese 1",
"inputs": {
"cheeseNumber": "01"
}
},
{
"name": "New Cheese 2",
"inputs": {
"cheeseNumber": "02"
}
}
]
使用参数化构造函数,以便我可以将设置器保持私有。我正在反序列化使用:
using (StreamReader r = new StreamReader(cheeseFilePath))
{
var json = r.ReadToEnd();
var cheeses = JsonConvert.DeserializeObject<List<Cheese>>(json);
foreach (var cheese in cheeses)
{
Console.WriteLine(cheese.ToString());
}
}
这些是我的课程:
using System;
namespace ReadingJsonIntoObjects
{
public class Cheese
{
//private Cheese(string name,
// Inputs inputs)
//{
// this.Name = name;
// this.Inputs = inputs;
//}
public String Name { get; set; }
public override string ToString()
{
return String.Format("Cheese: '{0}' - Inputs: CheeseNumber: {1}",
this.Name, this.Inputs.CheeseNumber);
}
public Inputs Inputs { get; set; }
}
public class Inputs
{
public Inputs(string cheeseNumber)
{
this.CheeseNumber = cheeseNumber;
}
public String CheeseNumber { get; private set; }
}
}
注释掉构造函数后,它就可以工作了。但这需要输入的设置器是公开的,我希望它是私有的。将其标记为私有且未注释 ctor,我得到了
Newtonsoft.Json.dll 中出现“Newtonsoft.Json.JsonSerializationException”类型的未处理异常
附加信息:找不到用于类型 ReadingJsonIntoObjects.Cheese 的构造函数。一个类应该有一个默认构造函数、一个带参数的构造函数或一个标有 JsonConstructor 属性的构造函数。路径“[0].name”,第 3 行,位置 11。
该类只有一个带参数的构造函数,但无法识别。有没有办法将其标记为私有并仍然正确反序列化?
【问题讨论】:
标签: json.net