Deserialize from json where there can be one T object or T array in List <T>
I have a code like this:
var json = GetJsonData(path);
JObject event_dates_data = JObject.Parse(json);
var event_dates_list = JObject.Parse(event_dates_data["document"]["date"].ToString());
var event_dates = JsonConvert.DeserializeObject<List<EventDate>>(event_dates_list.ToString());
Json can contain array objects (for example, "date: [{}, {}, {}]") or only one (for example, "date: {}")
Json looks like this:
{
"document": {
"result": "success",
"resultcode": "000000",
"note": null,
"totaldates": "1",
"date": {
"date_id": "351314",
"live": "n",
"datestart": "2012-03-07",
"dateend": "2015-03-07",
"timestart": "12:00",
"timeend": "14:00",
"date_available": "10000"
}
}
}
Or:
{
"document": {
"result": "success",
"resultcode": "000000",
"note": null,
"totaldates": "4",
"date": [
{
"date_id": "346022",
"live": "n",
"datestart": "2011-02-19",
"dateend": "2011-02-19",
"timestart": "12:00",
"timeend": "14:00",
"date_available": "10000"
},
{
"date_id": "346023",
"live": "n",
"datestart": "2011-02-20",
"dateend": "2011-02-20",
"timestart": "12:00",
"timeend": "14:00",
"date_available": "10000"
},
{
"date_id": "346024",
"live": "n",
"datestart": "2011-02-21",
"dateend": "2011-02-21",
"timestart": "12:00",
"timeend": "14:00",
"date_available": "10000"
},
{
"date_id": "546580",
"live": "y",
"datestart": "2015-08-15",
"dateend": "2015-08-15",
"timestart": "12:00",
"timeend": "14:00",
"date_available": "10000"
}
]
}
}
I have poco for the "date":
public class EventDate {
[JsonProperty("date_id")]
public string Id { get; set; }
[JsonProperty("live")]
[JsonConverter(typeof(AvailableForSalesFiledConverter))]
public bool AvailableForSales { get; set; }
[JsonProperty("datestart")]
public string DateStart { get; set; }
[JsonProperty("dateend")]
public string DateEnd { get; set; }
[JsonProperty("timestart")]
public string TimeStart { get; set; }
[JsonProperty("timeend")]
public string TimeEnd { get; set; }
[JsonProperty("date_available")]
public int DateAvailable { get; set; }
}
, , : " JSON (, {\" name\ ": \" value\"}) 'System.Collections.Generic.List`1 [TicketProvider.BrownPaperTickets.Entities.EventDate]' JSON (, [1,2,3]) . \r\nTo JSON JSON (, [1,2,3]) , .NET(, integer, , ) JSON. JsonObjectAttribute JSON.\r\nPath 'date_id', 2, 13. " List?
+4
3
var json = GetJsonData(path);
JObject event_dates_data = JObject.Parse(json);
var event_dates_list = JObject.Parse(event_dates_data["document"]["date"].ToString());
event_dates_list = string.Format("[{0}]", event_dates_list.Trim('[', ']'));
var event_dates = JsonConvert.DeserializeObject<List<EventDate>>(event_dates_list.ToString());
+1
, , .
POCO, . DateTime EventDate, :
var my_poco = // create your object here;
var poco_as_json = Newtonsoft.Json.JsonConvert.SerializeObject(my_poco);
// You then save that to a file (I assume that what you're doing)
// Get it back will look like:
var back_from_json = Newtonsoft.Json.JsonConvert
.DeserializeObject<your_poco_class>(json);
// and then simply use the object lists:
var dates = back_from_json.event_dates_list; // list of dates
var events = = back_from_json.events; // list of events?
poco .
poco :
"document", "result", "resultcode", "note", "totaldates", "date"
, document, totaldates int, date List<DateEvent>.
, .
0