Ответ 1
В соответствии с этим post это намного лучше:
// pick out one album
JObject jalbum = albums[0] as JObject;
// Copy to a static Album instance
Album album = jalbum.ToObject<Album>();
Документация: Преобразование JSON в тип
Я с радостью использую библиотеку Newtonsoft JSON.
Например, я бы создал объект JObject
из объекта .NET, в данном случае экземпляр Exception (может быть или не быть подклассом)
if (result is Exception)
var jobjectInstance = JObject.FromObject(result);
теперь я знаю, что библиотека может десериализовать текст JSON (т.е. строку) объекту
// only works for text (string)
Exception exception = JsonConvert.DeserializeObject<Exception>(jsontext);
но я ищу:
// now i do already have an JObject instance
Exception exception = jobjectInstance.????
Хорошо, что я могу перейти от JObject
к тексту JSON, а затем использовать функциональность десериализации, но это кажется мне обратным.
В соответствии с этим post это намного лучше:
// pick out one album
JObject jalbum = albums[0] as JObject;
// Copy to a static Album instance
Album album = jalbum.ToObject<Album>();
Документация: Преобразование JSON в тип
Из документации я нашел это
JObject o = new JObject(
new JProperty("Name", "John Smith"),
new JProperty("BirthDate", new DateTime(1983, 3, 20))
);
JsonSerializer serializer = new JsonSerializer();
Person p = (Person)serializer.Deserialize(new JTokenReader(o), typeof(Person));
Console.WriteLine(p.Name);
Определение класса для Person
должно быть совместимо со следующим:
class Person {
public string Name { get; internal set; }
public DateTime BirthDate { get; internal set; }
}
Edit
Если вы используете последнюю версию JSON.net и не нуждаетесь в специальной сериализации, см. выше ответ TianDo (или ниже, если вы повышаете меня: P), что является более кратким.