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

时间:2014-04-16 18:09:29

标签: c# json object serialization keyword

按照原样定义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; }
}

4 个答案:

答案 0 :(得分:4)

更改

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#中转义所涉及的怪癖:

  • 字符文字转义
  

e.g。 '\'','\ n','\ u20AC'(欧元货币符号),'\ x9'

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

  

e.g。 “... \吨... \ u0040 ... \ U000000041 ... \ X9 ......”

  • 逐字字符串转义:
  

e.g。 @ “... ”“ ...”

  • string.Format转义:
  

e.g。 “... {{...}} ...”

  • 关键字转义:
  

e.g。 @if(if if as identifier)

  • 标识符转义:
  

e.g。 i \ u0064(对于id)

答案 1 :(得分:1)

尝试使用相关媒体资源上的[DataContract(Name = "@event")]属性。然后它将(de)正确序列化,并且您可以重命名该属性以使其编译。

答案 2 :(得分:1)

我能够将" e"资本化,它仍然有效。看起来解析机制不区分大小写。

答案 3 :(得分:-1)

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

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