C# 具有字符串列表的JSON反序列化对象

C# 具有字符串列表的JSON反序列化对象,c#,.net,json.net,C#,.net,Json.net,我有一个JSON字符串,我想转换C#对象: [ { "Title": "TOY STORY 4", "Genre": "COMEDY", "Actors": [ "Tom Hanks", "Tim Allen", "Annie

我有一个JSON字符串,我想转换C#对象:

[
  {
        "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);