输入'string []',这不是受支持的原始类型或有效的实体类型。 -如何反序列化json字符串?

时间:2019-02-20 14:01:01

标签: c# json.net deserialization

我在json以下

 "PayloadData": {
      "CustomFields": ['test','test2'],
      "SampleNumber":"123"
     }

我正在使用以下代码反序列化json。

   Message message = JsonConvert.DeserializeObject<Message>(payloadData);

这是我在Message类中的财产

    /// <summary>
    /// Gets or sets CustomFields
    /// </summary>
    [Required]
    [DataMember(Name = "CustomFields")]
    public List<string> CustomFields{ get; set; }

但是,我遇到了以下错误。

  

“无法映射属性'Message.CustomFields',因为它的类型为'string []',它不是受支持的原始类型或有效的实体类型。要么显式映射此属性,要么使用'[NotMapped]'属性或通过在'OnModelCreating'中使用'EntityTypeBuilder.Ignore'。”

1 个答案:

答案 0 :(得分:1)

您可以尝试使用此online json to C# class generator来获取反序列化json字符串所需的POCO的结构。

然后只需将其映射到您的EF类(例如使用AutoMapper):

因此,此JSON:

 {
  "CustomFields": ['test','test2'],
  "SampleNumber":"123"
 }

这是生成的POCO:

public class RootObject
{
    public List<string> CustomFields { get; set; }
    public string SampleNumber { get; set; }
}

如果这是您的实际JSON:

    { "PayloadData":     
     {
      "CustomFields": ['test','test2'],
      "SampleNumber":"123"
     }
    }

您的POCO应该是这样的:

public class PayloadData
{
    public List<string> CustomFields { get; set; }
    public string SampleNumber { get; set; }
}

public class RootObject
{
    public PayloadData PayloadData { get; set; }
}