object to deserialize has a C# keyword

假装没事ソ 提交于 2019-12-17 16:53:56

问题


With the JSON defined as it is, in order to deserialize it as an object, I'd need to create a property on my class called "event", which is a C# keyword. Is there another way to tell it what the field names will be?

Here's an example of the JSON:

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

Here are my classes that won't compile because of the keyword:

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

回答1:


Try using the [DataContract(Name = "@event")] attribute on the relevant property. Then it will (de)serialize correctly, and you can rename the property so that it compiles.




回答2:


Change

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

to this

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

This tip shows the quirks involved with escaping in C#:

  • character literal escaping:

e.g. '\'', '\n', '\u20AC' (the Euro € currency sign), '\x9'

(equivalent to \t)) - literal string escaping:

e.g. "...\t...\u0040...\U000000041...\x9..."

  • verbatim string escaping:

e.g. @"...""..."

  • string.Format escaping:

e.g. "...{{...}}..."

  • keyword escaping:

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

  • identifier escaping:

e.g. i\u0064 (for id)




回答3:


I was able to just capitalize the "e", and it still works. Looks like the parsing mechanism is case-insensitive.



来源:https://stackoverflow.com/questions/23116995/object-to-deserialize-has-a-c-sharp-keyword

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!