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

kud*_*ger 5 c# json.net deserialization

我有以下 json

 "PayloadData": {
      "CustomFields": ['test','test2'],
      "SampleNumber":"123"
     }
Run Code Online (Sandbox Code Playgroud)

我正在使用下面的代码来反序列化 json。

   Message message = JsonConvert.DeserializeObject<Message>(payloadData);
Run Code Online (Sandbox Code Playgroud)

这是我在Message课堂上的财产

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

但是,我得到以下错误。

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

Jus*_*ing 2

您可以尝试使用此在线 json 到 C# 类生成器来获取反序列化 json 字符串所需的 POCO 结构。

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

所以对于这个 JSON:

 {
  "CustomFields": ['test','test2'],
  "SampleNumber":"123"
 }
Run Code Online (Sandbox Code Playgroud)

这是生成的 POCO:

public class RootObject
{
    public List<string> CustomFields { get; set; }
    public string SampleNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如果这是你实际的 JSON:

    { "PayloadData":     
     {
      "CustomFields": ['test','test2'],
      "SampleNumber":"123"
     }
    }
Run Code Online (Sandbox Code Playgroud)

这就是你的 POCO 的样子:

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

public class RootObject
{
    public PayloadData PayloadData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)