要反序列化的对象具有C#关键字

本文关键字:关键字 对象 反序列化 | 更新日期: 2023-09-27 17:58:43

定义JSON后,为了将其反序列化为对象,我需要在类上创建一个名为"event"的属性,它是C#关键字。有没有其他方法可以告诉它字段名称是什么?

以下是JSON的一个示例:

{event:123数据:{"data":"0D0401","ttl":"60","published_at":"2014-04-16T18:04:42.446Z","id":"48ff6f065067555031192387"}}

以下是由于关键字而无法编译的类

public class Event
{
    public int event { get; set; }
    public EventDetail data { get; set; }
}
public class EventDetail
{
    public string data { get; set; }
    public string ttl { get; set; }
    public DateTime published_at { get; set; }
    public string id { get; set; }
}

要反序列化的对象具有C#关键字

更改

public class Event
{
    public int event { get; set; }
    public EventDetail data { get; set; }
}

到这个

public class Event
{
    public int @event { get; set; }
    public EventDetail data { get; set; }
}

这个提示显示了C#中与转义有关的怪癖:

  • 字符文字转义

例如"''"、"''n"、"''u20AC"(欧元-欧元货币符号)、"''x9"

(相当于''t)-文字字符串转义:

例如"…''t…''u0040…''u00000041…''x9…"

  • 逐字逐句字符串转义:

例如@"…"…"

  • 字符串。格式转义:

例如"…{…}"

  • 关键字转义:

例如@if(用于if作为标识符)

  • 标识符转义:

例如i''u0064(用于id)

尝试在相关属性上使用[DataContract(Name = "@event")]属性。然后它将正确地(反)序列化,并且您可以重命名该属性,以便它进行编译。

我可以将"e"大写,它仍然有效。解析机制似乎不区分大小写。

无论如何都有人会重新访问。。。在DotNet 3.1 using System.Text.Json.Serialization中使用属性

[JsonPropertyName("TheNameItHasInJsonFile")]
public int Something {get;set;}