我想知道是否有任何关于如何使用使用TextReader或StreamReader而不仅仅是字符串的JSON.Net为asp网制作自定义JsonConverter的示例。例如,有这样的例子http://www.newtonsoft.com/json/help/html/CustomJsonConverter.htm 使用自定义JsonConvert类:
string json =
"{
"Keys": [
"FirstName",
"LastName",
"Roles"
],
"FirstName": "James",
"LastName": "Newton-King",
"Roles": [
"Admin"
]
}"
Employee newEmployee = JsonConvert.DeserializeObject<Employee>(json, new KeysJsonConverter(typeof(Employee)));
但是我想知道是否有可能反序列化使用流阅读器的json: http://www.newtonsoft.com/json/help/html/DeserializeWithJsonSerializerFromFile.htm
// deserialize JSON directly from a file
using (StreamReader file = File.OpenText(@"c:\movie.json"))
{
JsonSerializer serializer = new JsonSerializer();
// somehow make serializer use a custom JsonConverter
Movie movie2 = (Movie)serializer.Deserialize(file, typeof(Movie));
// hoping that movie2 contains the custom converted json
}
答案 0 :(得分:2)
您可以使用JsonSerializer
使用所需的转换器构建JsonSerializerSettings
:
var settings = new JsonSerializerSettings
{
Converters = { new KeysJsonConverter(typeof(Employee)) },
};
var serializer = JsonSerializer.CreateDefault(settings);
然后使用当前正在执行的序列化程序直接从流中读取。
参考:JsonSerializer.CreateDefault(JsonSerializerSettings)
的文档。
如果您不想使用global default settings,请改用JsonSerializer.Create(JsonSerializerSettings)
。但是JsonConvert.DeserializeObject<T>()
使用全局默认值,因此从DeserializeObject<T>
切换到JsonSerializer.Create()
可能会导致更改。您找到的documentation中未提及此小区别。
答案 1 :(得分:1)
StreamReader有一个ReadToEnd()函数,它返回一个字符串。
string jsonString = file.ReadToEnd();
Movie movie2 = JsonConvert.DeserializeObject<Movie>(jsonString);