System.Text.Json.Deserialize数组成C#类

问题描述

首先,我正在使用Google recaptcha RESTful服务,尝试将JSON对象放入类中。使用WSDL,Visual Studio会为您生成所有这些代码,以便于使用,但是RESTful似乎您必须自己做所有事情,我是否有所遗漏?我正在使用VS2019,可能会想到有某种方法可以导入这些东西以使生活变得轻松。我还没找到任何东西,所以...

Google返回:

{
  "success": false,"error-codes": [
    "invalid-input-response","invalid-input-secret"
  ]
}

我想反序列化为这个:

    [DataContract]
    public class GoogleReCaptchaResponse
    {
        [DataMember(Name = "success")]
        public bool Success { get; set; }
        [DataMember(Name = "error-codes")]
        public List<string> ErrorCodes { get; set; }

        [JsonExtensionData]
        public Dictionary<string,object> ExtensionData { get; set; }
    }

我在ExtensionData中看到了错误代码,但是ErrorCodes始终为null。我怎么了?

https://dotnetfiddle.net/RtjbwR

解决方法

您应该使用JsonPropertyName命名空间中的System.Text.Json.Serialization属性

using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;

public class GoogleReCaptchaResponse
{
    [JsonPropertyName("success")]
    public bool Success { get; set; }

    [JsonPropertyName("error-codes")]
    public List<string> ErrorCodes { get; set; }
}

public class Program
{
    public static void Main()
    {
        GoogleReCaptchaResponse json = System.Text.Json.JsonSerializer.Deserialize<GoogleReCaptchaResponse>("{ \"success\": false,\"error-codes\": [\"invalid-input-response\",\"invalid-input-secret\"]}");
        if (json.ErrorCodes == null)
        {
            Console.WriteLine("no Error Codes");
        }
        else
        {
            Console.WriteLine("Error Codes!");
        }
    }
}