Пока вы хотите изменить цвет фона области содержимого, а не фрейма и панели инструментов, вам не нужно подклассы NSWindow
. То, что вам нужно сделать, это подкласс NSView
и сделать ваш пользовательский вид нарисовать нужный цвет, а затем установить экземпляр этого класса в виде содержимого содержимого окна.
Кроме того, вы можете уйти с установкой без полей NSImageView
или NSColorWell
в качестве представления содержимого, но я не уверен, что Apple означает, что для тех, у кого есть subviews. Если нет, вы должны оставить свое окно пустым.
Тем не менее, вы должны действительно убедиться, что пользовательский цвет фона подходит. Почти всегда, это не так, и вы должны придерживаться вида Aqua или HUD.
Я использую это в своем коде, и он работает нормально.
ниже приведен фрагмент кода, который нужно написать
using System.Web.Script.Serialization;
JavaScriptSerializer oJS = new JavaScriptSerializer();
RootObject oRootObject = new RootObject();
oRootObject = oJS.Deserialize<RootObject>(Your JSon String);
. Должно быть так:
var jobject = JsonConvert.DeserializeObject<RootObject>(jsonstring);
Вы можете вставить сюда строку json: http://json2csharp.com/ , чтобы проверить правильность ваших классов.
Если вы используете C # 2010 или новее, вы можете использовать динамический тип :
dynamic json = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonstring);
Затем вы можете получить доступ к атрибутам и массивам в динамическом объекте, используя точечную запись:
string nemo = json.response[0].images[0].report.nemo;
Сначала установите пакет newtonsoft.json
в Visual Studio
, используя NuGet Package Manager
, затем добавьте следующий код:
ClassName ObjectName = JsonConvert.DeserializeObject < ClassName > (jsonObject);
У меня был сценарий, и этот помог мне
JObject
objParserd = JObject
.Parse (jsonString);
JObject
arrayObject1 = (JObject
) objParserd ["d"];
D
myOutput = JsonConvert
.DeserializeObject <D>
(arrayObject1.ToString ());
shareInfo - это класс:
public class ShareInfo
{
[JsonIgnore]
public readonly DateTime Timestamp = DateTime.Now;
[JsonProperty("sharename")]
public string ShareName = null;
[JsonProperty("readystate")]
public string ReadyState = null;
[JsonProperty("created")]
[JsonConverter(typeof(Newtonsoft.Json.Converters.UnixDateTimeConverter))]
public DateTime? CreatedUtc = null;
[JsonProperty("title")]
public string Title = null;
[JsonProperty("getturl")]
public string GettUrl = null;
[JsonProperty("userid")]
public string UserId = null;
[JsonProperty("fullname")]
public string Fullname = null;
[JsonProperty("files")]
public GettFile.FileInfo[] Files = new GettFile.FileInfo[0];
}
// POST request.
var gett = new WebClient { Encoding = Encoding.UTF8 };
gett.Headers.Add("Content-Type", "application/json");
byte[] request = Encoding.UTF8.GetBytes(jsonArgument.ToString());
byte[] response = gett.UploadData(baseUri.Uri, request);
// Response.
var shareInfo = JsonConvert.DeserializeObject<ShareInfo>(Encoding.UTF8.GetString(response));
public static void Main(string[] args)
{
string json = @" {
""children"": [
{
""url"": ""foo.pdf"",
""expanded"": false,
""label"": ""E14288-Passive-40085-2014_09_26.pdf"",
""last_modified"": ""2014-09-28T11:19:49.000Z"",
""type"": 1,
""size"": 60929
}
]
}";
var result = JsonConvert.DeserializeObject<ChildrenRootObject>(json);
DataTable tbl = DataTableFromObject(result.children);
}
public static DataTable DataTableFromObject<T>(IList<T> list)
{
DataTable tbl = new DataTable();
tbl.TableName = typeof(T).Name;
var propertyInfos = typeof(T).GetProperties();
List<string> columnNames = new List<string>();
foreach (PropertyInfo propertyInfo in propertyInfos)
{
tbl.Columns.Add(propertyInfo.Name, propertyInfo.PropertyType);
columnNames.Add(propertyInfo.Name);
}
foreach(var item in list)
{
DataRow row = tbl.NewRow();
foreach (var name in columnNames)
{
row[name] = item.GetType().GetProperty(name).GetValue(item, null);
}
tbl.Rows.Add(row);
}
return tbl;
}
public class Child
{
public string url { get; set; }
public bool expanded { get; set; }
public string label { get; set; }
public DateTime last_modified { get; set; }
public int type { get; set; }
public int size { get; set; }
}
public class ChildrenRootObject
{
public List<Child> children { get; set; }
}
Я использую следующее:
using System.Web.Script.Serialization;
...
public static T ParseResponse<T>(string data)
{
return new JavaScriptSerializer().Deserialize<T>(data);
}
Я решил эту проблему, добавив открытый сеттер для всех свойств, которые должны быть десериализованы.
Вы можете решить вашу проблему, как показано ниже:
public class Response
{
public string loopa { get; set; }
public string drupa{ get; set; }
public Image[] images { get; set; }
}
public class RootObject<T>
{
public List<T> response{ get; set; }
}
var des = (RootObject<Response>)Newtonsoft.Json.JsonConvert.DeserializeObject(Your JSon String, typeof(RootObject<Response>));
У меня также была проблема с анализом и использованием объектов JSON в C #. Я проверял динамический тип с некоторыми библиотеками, но проблема всегда заключалась в проверке существования свойства.
В конце концов, я наткнулся на эту веб-страницу , которая сэкономила мне много времени. Он автоматически создает строго типизированный класс на основе ваших данных JSON, который вы будете использовать с библиотекой Newtonsoft, и он отлично работает. Он также работает с языками, отличными от C #.