C# 具有字符串列表的JSON反序列化对象
我有一个JSON字符串,我想转换C#对象:C# 具有字符串列表的JSON反序列化对象,c#,.net,json.net,C#,.net,Json.net,我有一个JSON字符串,我想转换C#对象: [ { "Title": "TOY STORY 4", "Genre": "COMEDY", "Actors": [ "Tom Hanks", "Tim Allen", "Annie
[
{
"Title": "TOY STORY 4",
"Genre": "COMEDY",
"Actors": [
"Tom Hanks",
"Tim Allen",
"Annie Potts"
],
"Id": 1
},
{
"Title": "The Matrix",
"Genre": "Action",
"Actors": [
"Keanu Reeves",
"Laurence Fishburne",
"Carrie-Anne Moss"
],
"Id": 2
}
]
公共类电影1
{
公共字符串标题{get;set;}
公共字符串类型{get;set;}
公共列表参与者{get;set;}
公共int id{get;set;}
}
公共级演员
{
公共字符串参与者{get;set;}
公共int Id{get;set;}
}
我的反序列化代码:
public class Movies1
{
public string Title { get; set; }
public string Genre{ get; set; }
public List<Actor> Actors { get; set; }
public int id { get; set; }
}
public class Actor
{
public string Actors { get; set; }
public int Id { get; set; }
}
List=JsonConvert.DeserializeObject(json);
我得到以下错误:
“ExceptionMessage”:“无法从System.String强制转换或转换为”
XXXXX.模特。演员。”,
“ExceptionType”:“System.ArgumentException”,
“StackTrace”:“位于Newtonsoft.Json.Utilities.ConvertUtils.EnsureTypeAssignable(对象
值、类型
initialType,Type targetType)\r\n位于Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(对象
initialValue,CultureInfo区域性,键入targetType)\r\n位于
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader
读取器,对象
值,CultureInfo区域性,JsonContract合同,类型targetType)”
似乎
Actors
是一个字符串列表,您需要的是如下内容:
List<movies> = JsonConvert.DeserializeObject<List<Movies1>>(json);
公共类电影1
{
公共字符串标题{get;set;}
公共字符串类型{get;set;}
公共列表参与者{get;set;}
公共int Id{get;set;}
}
公共类根
{
公共列表电影{get;set;}
}
然后:
Root myDeserializedClass=JsonConvert.DeserializeObject(myJsonResponse);
这是因为“Actors”数组中的条目无法反序列化为Actor类实例。它可以反序列化为字符串。所以在你的电影课上你应该有“公开演员名单{get;set;}”。
在我看来,实现这一点的最佳方法是创建一组类——一个用于用POCO对象反序列化JSON的类。另一个是JSON中不可用的一些附加属性(比如为actor添加id,因为这在JSON中不可用)。通过这种方式,您可以将应用程序的逻辑与存储区分开,从而可以轻松更改JSON格式,也可以在不受JSON格式约束的情况下改进逻辑。在我看来,您自己已经回答了这个问题:它有一个字符串列表。不是复杂对象的列表
Actor
,而是string
公共列表Actor{get;set;}
如果您有新问题,请将其作为新问题发布。您不应该在一个问题中问多个问题(这个问题是关于反序列化JSON的),也不应该编辑您的问题以使现有答案无效,因为您想要的是与您在原始问题中没有提到的完全不同的内容。public List Actors{get;set;}所以问题是,当我试图将对象保存到DB时,表中不包含参与者。我不熟悉这个(@Stefan这似乎超出了你的问题范围。我建议你问一个新问题。嗨@john,我刚刚更新了我的问题……所以你的类用于与实体框架(或类似的ORM)交互?如果是,你肯定应该为JSON存储和数据库存储分离类。1.你创建了新类(类似于您现在拥有的那个些)将参与者作为列表。2.将JSON反序列化给他们。3.基于反序列化的实例创建Movies1实例,并将其保存到数据库中。
public class Movies1
{
public string Title { get; set; }
public string GENRE { get; set; }
public List<string> Actors { get; set; }
public int Id { get; set; }
}
public class Root
{
public List<Movies1> Movies { get; set; }
}
Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse);