【发布时间】:2018-11-30 17:56:26
【问题描述】:
我正在尝试使用以下代码根据我的模型反序列化 JSON 对象:
LoadData<MyModel>(Data.Stats, null);
public void LoadData<TModel>(string data, JsonSerializerSettings jsonSettings) where TModel : class
{
var mockData = JsonConvert.DeserializeObject<Collection<TModel>>(data, jsonSettings); // ERROR HERE
Context.SaveChanges();
}
但是我收到一条错误消息
Newtonsoft.Json.JsonReaderException: '解析值时遇到意外字符: {.路径 '[0].Statistics',第 7 行,位置 19。'
我的 JSON 对象是:
[
{
"Id": 3033,
"Grade": 3,
"Statistics": { //ERROR OCCURS ON THIS PROPERTY
"Avatar.Add": 1,
"TotalPlays": 36,
"Game.TotalPlays.Spell_Mem_Words": 27,
"Book.TotalReads.Count": 23,
"Game.TotalPlays.Count": 39,
"Character.TotalPlays.L": 23,
"Character.TotalPlays.E": 3,
"TotalPlays.Pick_Vocab": 16,
"Character.TotalPlays.R": 22
}
}
]
对象模型是:
public class MyModel
{
public int Id { get; set; }
public int Grade { get; set; }
public string Statistics { get; set; }
}
我尝试过的事情
(1)Using json lint我已经确保json字符串有效。
(2) 在 javascript 中,用反引号序列化对象是有效的。反引号在 C# 中不起作用JS Fiddle
(3) 尝试在对象模型中制作 Statistics 属性以使用名为 stats 的类而不是类似字符串
public class Stats
{
public string Label { get; set;}
public int Value { get; set; }
}
(4) 几乎尝试了所有the answers on this SO post
很遗憾,我仍然没有解决这个问题。有什么想法吗?
【问题讨论】:
-
当你使用
Stats类时,你是如何声明Statistics属性的?您是否考虑过将Statistics变成Dictionary<string, int>? -
您的
Statistics属性是一个字符串。 -
另请参阅:Accessing properties with a dot in their name,以防您使用类。
-
我没有看到任何“明显”错误。 MCVE 肯定会有所帮助。
标签: c# json json.net deserialization json-deserialization