【问题标题】:How can I make Newtonsoft accept this property name with an underscore?如何让 Newtonsoft 接受这个带有下划线的属性名称?
【发布时间】:2022-06-13 21:18:54
【问题描述】:

我正在从外部 API 检索数据。他们的字段名称之一是“from_address”。所以我把它作为 JsonPropertyName。但这不起作用。我在这个小提琴中重现了这个问题。

public class Program
{
    public class FromAddress
    {
        [JsonPropertyName("name")]
        public string Name { get; set; }

        [JsonPropertyName("email")]
        public string Email { get; set; }
    }

    public class Email
    {
        [JsonPropertyName("id")]
        public string Id { get; set; }

        [JsonPropertyName("from_address")]
        public FromAddress FromAddress { get; set; }
    }

    public static void Main()
    {
        var str = "{\"from_address\":{\"name\":\"me\",\"email\":\"me@me.me\"}, 
\"id\":\"the_one\"}";
        var result = Newtonsoft.Json.JsonConvert.DeserializeObject<Email>(str);
        Console.WriteLine(result.FromAddress != null ? "something" : "nothing"); // nothing
        Console.WriteLine(result.Id); // the_one
        Console.WriteLine(result.FromAddress.Email); // throws a null reference exception
    }
}

我知道问题在于下划线,因为如果我在我的小提琴(在 JsonPropertyName 和变量 str 中)将“from_address”替换为“fromaddress”,它就可以工作。

【问题讨论】:

  • JsonPropertyName 来自System.Text.Json?在这种情况下,这是错误的属性

标签: c# json.net


猜你喜欢
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 2013-02-21
  • 1970-01-01
相关资源
最近更新 更多