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; }
}
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#:
eg '\\'', '\\n', '\€' (the Euro € currency sign), '\\x9'
(equivalent to \\t)) - literal string escaping:
eg "...\\t...\@...\\U000000041...\\x9..."
eg @"...""..."
eg "...{{...}}..."
eg @if (for if as identifier)
eg i\d (for id)
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.
I was able to just capitalize the "e", and it still works. Looks like the parsing mechanism is case-insensitive.
Just in any case someone revisits this... in DotNet 3.1 using System.Text.Json.Serialization
use the attribute
[JsonPropertyName("TheNameItHasInJsonFile")]
public int Something {get;set;}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.