Как десериализовать сложный объект JSON в C # .NET?

Пока вы хотите изменить цвет фона области содержимого, а не фрейма и панели инструментов, вам не нужно подклассы NSWindow. То, что вам нужно сделать, это подкласс NSView и сделать ваш пользовательский вид нарисовать нужный цвет, а затем установить экземпляр этого класса в виде содержимого содержимого окна.

Кроме того, вы можете уйти с установкой без полей NSImageView или NSColorWell в качестве представления содержимого, но я не уверен, что Apple означает, что для тех, у кого есть subviews. Если нет, вы должны оставить свое окно пустым.

Тем не менее, вы должны действительно убедиться, что пользовательский цвет фона подходит. Почти всегда, это не так, и вы должны придерживаться вида Aqua или HUD.

23
задан Peter Mortensen 18 April 2019 в 21:40
поделиться

11 ответов

Я использую это в своем коде, и он работает нормально.

ниже приведен фрагмент кода, который нужно написать

using System.Web.Script.Serialization;

JavaScriptSerializer oJS = new JavaScriptSerializer();
RootObject oRootObject = new RootObject();
oRootObject = oJS.Deserialize<RootObject>(Your JSon String);
.
40
ответ дан Javal Patel 18 April 2019 в 21:40
поделиться

Должно быть так:

var jobject = JsonConvert.DeserializeObject<RootObject>(jsonstring);

Вы можете вставить сюда строку json: http://json2csharp.com/ , чтобы проверить правильность ваших классов.

35
ответ дан stevepkr84 18 April 2019 в 21:40
поделиться

Если вы используете C # 2010 или новее, вы можете использовать динамический тип :

dynamic json = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonstring);

Затем вы можете получить доступ к атрибутам и массивам в динамическом объекте, используя точечную запись:

string nemo = json.response[0].images[0].report.nemo;
17
ответ дан filipko 18 April 2019 в 21:40
поделиться

Сначала установите пакет newtonsoft.json в Visual Studio, используя NuGet Package Manager, затем добавьте следующий код:

ClassName ObjectName = JsonConvert.DeserializeObject < ClassName > (jsonObject);
8
ответ дан Dmitry Pavlov 18 April 2019 в 21:40
поделиться

У меня был сценарий, и этот помог мне

JObject objParserd = JObject .Parse (jsonString);

JObject arrayObject1 = (JObject) objParserd ["d"];

D myOutput = JsonConvert .DeserializeObject <D> (arrayObject1.ToString ());

3
ответ дан Ozesh 18 April 2019 в 21:40
поделиться

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));
2
ответ дан Veera Induvasi 18 April 2019 в 21:40
поделиться
 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; }
}
2
ответ дан 18 April 2019 в 21:40
поделиться

Я использую следующее:

    using System.Web.Script.Serialization;       

    ...

    public static T ParseResponse<T>(string data)
    {
        return new JavaScriptSerializer().Deserialize<T>(data);
    }
0
ответ дан Uzzy 18 April 2019 в 21:40
поделиться

Я решил эту проблему, добавив открытый сеттер для всех свойств, которые должны быть десериализованы.

0
ответ дан everydayXpert 18 April 2019 в 21:40
поделиться

Вы можете решить вашу проблему, как показано ниже:

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>));
0
ответ дан Mahdi ghafoorian 18 April 2019 в 21:40
поделиться

У меня также была проблема с анализом и использованием объектов JSON в C #. Я проверял динамический тип с некоторыми библиотеками, но проблема всегда заключалась в проверке существования свойства.

В конце концов, я наткнулся на эту веб-страницу , которая сэкономила мне много времени. Он автоматически создает строго типизированный класс на основе ваших данных JSON, который вы будете использовать с библиотекой Newtonsoft, и он отлично работает. Он также работает с языками, отличными от C #.

0
ответ дан Peter Mortensen 18 April 2019 в 21:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: