繁体   English   中英

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

[英]object to deserialize has a C# keyword

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

下面是一个 JSON 示例:

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

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

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; }
}

改变

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'、'\€'(欧元 € 货币符号)、'\\x9'

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

例如“...\\t...\@...\\U000000041...\\x9...”

  • 逐字字符串转义:

例如@"...""..."

  • string.Format 转义:

例如“...{{...}}...”

  • 关键字转义:

例如@if(如果作为标识符)

  • 标识符转义:

例如 i\d(用于 ID)

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

我能够大写“e”,它仍然有效。 看起来解析机制不区分大小写。

无论如何,有人会重新审视这个......在 DotNet 3.1 中using System.Text.Json.Serialization使用该属性

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM