Доброе утро! Я пишу класс для рисования гистограмм и для удобства пользователей решил добавить несколько удобных конструкторов.
Однако, как только я недавно перешел на контракты кода .NET от DevLabs, я хочу в полной мере использовать предварительные условия для защиты от моей (или чьей-то) глупости.
public HistoGrapher(IList<string> points, IList<T> values)
: this(points.Select((point, pointIndex) => new KeyValuePair<string, T>(point, values[pointIndex])))
{
Contract.Requires<ArgumentNullException>(points != null, "points");
Contract.Requires<ArgumentNullException>(values != null, "values");
Contract.Requires<ArgumentException>(points.Count == values.Count, "The lengths of the lists should be equal.");
}
public HistoGrapher(IEnumerable<KeyValuePair<string, T>> pointValuePairs)
{
// useful code goes here
}
Есть кое-что, что меня смущает. Я не хочу, чтобы первый конструктор когда-либо вызывал второй, если контракт нарушен; однако предполагается, что вызов this (...)
будет выполнен до выполнения тела первого конструктора.
Будет ли этот код работать так, как я хочу? Я еще не пробовал. ) будет выполняться перед выполнением тела первого конструктора.
Будет ли этот код работать так, как я хочу? Я еще не пробовал. ) будет выполняться перед выполнением тела первого конструктора.
Будет ли этот код работать так, как я хочу? Я еще не пробовал. url ":" http: \ / \ / twitpic.com \ / 1lacuz "," width ": 220," height ": 84," ...
структура файла json, которую я десериализуем, выглядит как показано ниже:
{
"id" : "1lad07",
"text" : "test",
"url" : "http:\/\/twitpic.com\/1lacuz",
"width" : 220,
"height" : 84,
"size" : 8722,
"type" : "png",
"timestamp" : "Wed, 05 May 2010 16:11:48 +0000",
"user" : {
"id" : 12345,
"screen_name" : "twitpicuser"
}
}
Я создал класс, имена полей которого указаны как свойства для JavaScriptSerializer. Код, который я буду использовать для десериализации json, выглядит следующим образом:
using (var reader = new StreamReader(twitpicResponse.GetResponseStream())) {
var responseBody = reader.ReadToEnd();
var deserializer = new JavaScriptSerializer();
var results = deserializer.Deserialize<Response>(responseBody);
}
Моя проблема в том, как я могу прочитать поле пользователя в файле json. как показано ниже:
"user" : {
"id" : 12345,
"screen_name" : "twitpicuser"
}
он имеет вспомогательные свойства и значения. как я могу назвать их в моем классе Response. мой класс ответа теперь выглядит так:
public class Response {
public string id { get; set; }
public string text { get; set; }
public string url { get; set; }
public string width { get; set; }
public string height { get; set; }
public string size { get; set; }
public string type { get; set; }
public string timestamp { get; set; }
}
в каком случае лучше всего это сделать?