Graeme_Grant
Существуют веб-сайты, которые будут генерировать классы для вас из данных JSON. Мой любимый: JSON Utils: генерация C#, VB.Net, SQL Table, Java и PHP из JSON[^]
Используя приведенные выше данные JSON, генерируются следующие классы:
public class Field
{
[JsonProperty("value")]
public string Value { get; set; }
[JsonProperty("order")]
public int Order { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("type")]
public string Type { get; set; }
[JsonProperty("maxlen")]
public string Maxlen { get; set; }
[JsonProperty("required")]
public string Required { get; set; }
[JsonProperty("label")]
public string Label { get; set; }
[JsonProperty("time")]
public string Time { get; set; }
[JsonProperty("date")]
public string Date { get; set; }
}
public class Hidden
{
}
public class Example
{
[JsonProperty("fields")]
public IList<Field> Fields { get; set; }
[JsonProperty("action")]
public string Action { get; set; }
[JsonProperty("hidden")]
public Hidden Hidden { get; set; }
[JsonProperty("display")]
public string Display { get; set; }
}
Далее вам нужно будет написать код для преобразования / сопоставления данных JSON со структурой класса.
Галерея NuGet | Json.NET 10.0.3[
^] используется большинством.
После ссылки в вашем проекте вот вспомогательный класс, который я использую для преобразования из / в классы:
public static class JsonConverter
{
public static string FromClass<T>(T data, bool isEmptyToNull = false, JsonSerializerSettings jsonSettings = null)
{
string response = string.Empty;
if (!EqualityComparer<T>.Default.Equals(data, default(T)))
response = JsonConvert.SerializeObject(data, jsonSettings);
return isEmptyToNull ? (response == "{}" ? "null" : response) : response;
}
public static T ToClass<T>(string data, JsonSerializerSettings jsonSettings = null)
{
var response = default(T);
if (!string.IsNullOrEmpty(data))
response = jsonSettings == null
? JsonConvert.DeserializeObject<T>(data)
: JsonConvert.DeserializeObject<T>(data, jsonSettings);
return response;
}
}
И вот как использовать вспомогательный класс:
var rawJson = "{\"fields\": [{\"value\": \"3732\",\"order\": 1,\"name\": \"id\",\"type\": \"hidden\"},{\"maxlen\": \"13\",\"required\": \"\",\"value\": \"0\",\"order\": 2,\"name\": \"job\",\"label\": \"Job \",\"type\": \"text\"},{\"maxlen\": \"13\",\"required\": \"\",\"value\": \"0\",\"order\": 3,\"name\": \"client\",\"label\": \"Client \",\"type\": \"text\"},{\"maxlen\": \"50\",\"required\": \"required\",\"value\": \"Tim Nguyen\",\"order\": 4,\"name\": \"task_name\",\"label\": \"Task Name \",\"type\": \"text\"},{\"required\": \"required\",\"time\": \"05:30 PM\",\"date\": \"07/18/2017\",\"order\": 5,\"name\": \"start_date\",\"label\": \"Start Date \",\"type\": \"datetime\"},{\"required\": \"\",\"time\": \"07:00 PM\",\"date\": \"07/18/2017\",\"order\": 6,\"name\": \"end_date\",\"label\": \"End Date \",\"type\": \"datetime\"},{\"required\": \"\",\"value\": \"Roof Inspection\",\"order\": 7,\"name\": \"task_description\",\"label\": \"Task Description \",\"type\": \"textareainput\"}],\"action\": \"update_task\",\"hidden\": {},\"display\": \"Update Task\"}";
var result = JsonConverter.ToClass<Example>(rawJson);
BillWoodruff
+5 Очень полезная информация !
Я хотел бы предложить вам написать статью о вашей работе с Newtonsoft flavor JSON.
Кроме того, я хотел бы побудить ypu задуматься о том, является ли QA сервисом для написания кода для других людей или форумом, помогающим другим людям научиться становиться лучшими программистами, которые, возможно, смогут решить для себя более широкий круг проблем. Следует признать, что эти две "роли" (учитель, поставщик) не всегда могут быть разделены.
с уважением к вашему интеллекту, продуктивности и вашим прекрасным вкладам, Билл