C# Entity Framework Json 反序列化字符串数组问题
Posted
技术标签:
【中文标题】C# Entity Framework Json 反序列化字符串数组问题【英文标题】:C# Entity Framework Json deserialize String array issues 【发布时间】:2019-06-16 06:06:46 【问题描述】:我有一个可用于反序列化为实体框架的 Json 文件。为了简化,我们可以假设 Json 是这样的
"stat": "val0",
"results": [
"datasets": [
"val1",
"val2"
],
"head": "val3"
,
"datasets": [
"val4",
"val5"
],
"head": "val6"
]
还有我的实体类,比如
[Serializable]
public class Root
[Key]
public int Id get; set;
public int stat get; set;
public List<Result> results get; set;
[Serializable]
public class Result
[Key]
public int Id get; set;
public List<String> _strings get; set;
public List<string> Strings
get return _strings;
set _strings = value;
[Required]
public string datasets
get return String.Join(",", _strings);
set _strings = value.Split(',').ToList();
public string head get; set;
public virtual root get; set;
我知道 Entity Framework 不支持原始类型,并且我从我的数据集字段中知道问题的原因。我发现这种方法可以解决字符串数组反序列化问题here。我试过了
URL = "http://...";//Restful webservice address
WebClient client = new WebClient();
String JSON= client.DownloadString(URL);
var dsobj = new System.Web.Script.Serialization.javascriptSerializer().Deserialize<RootObject>(json);
但我得到了
System.InvalidOperationException
那我决定用Newtonsoft
URL = "http://...";//Restful webservice address
WebClient client = new WebClient();
String JSON= client.DownloadString(URL);
var dsobj = JsonConvert.DeserializeObject<Root>(json);
然后我得到了这个错误
Newtonsoft.Json.JsonReaderException: '解析值时遇到意外字符: [.路径 'results[0].senses[0].definition',第 1 行,位置...
我找到了this,但我想不通。
如何修复这些问题。任何帮助表示赞赏。
【问题讨论】:
datasets
JSON 数组应与实体类中的 List<string>
匹配。试试public List<string> dataSets
和public string datasetsAsString
。
我听不懂@michaelyin 你能告诉我吗?
【参考方案1】:
您的 json 包含两个不需要的逗号,请尝试删除它们
【讨论】:
当我简化原始 json 时,我忘记了清除逗号。然后我编辑了json。【参考方案2】:试试
[Serializable]
public class Root
[Key]
public int Id get; set;
public string stat get; set; // changed to a string
public List<Result> results get; set;
[Serializable]
public class Result
[Key]
public int Id get; set;
public List<String> _dataSets get; set;
public List<string> dataSets // the JSON array will deserialize into this property
get return _dataSets;
set _dataSets = value;
[Required]
public string DatasetsAsString
get return String.Join(",", _dataSets);
set _dataSets = value.Split(',').ToList();
public string head get; set;
public virtual root get; set;
编辑:stat 属性也必须是字符串。
【讨论】:
以上是关于C# Entity Framework Json 反序列化字符串数组问题的主要内容,如果未能解决你的问题,请参考以下文章
C# Entity-Framework:如何在模型对象上组合 .Find 和 .Include?
使用带有 C# 的 Entity Framework 6 调用现有的存储过程
Entity Framework C# Insert Data 俄语编码问题
C# Entity Framework中的IQueryable和IQueryProvider详解