Ответ:
Мне удалось выяснить мою собственную проблему. Я думаю, что проблема была связана с тем фактом, что мой Json был в формате массива, но я этого не осознавал.
Я попытался использовать другой класс сериализации, следуя за человеком, который разместил здесь . Новый класс выдал исключение, указывающее, что он не готов десериализовать массивы или что-то в этом роде.
Вот полученный код:
return new JavaScriptSerializer().Deserialize<IList<HubspotObject>>(inputContent);
Оригинальный вопрос:
Я впервые пытаюсь десериализовать данные из фида json из hubspot в конкретный объект. Я использую пример из этого проекта codepot , чтобы помочь выполнить работу.
Я получаю все нулевые свойства после попытки десериализации кода, и я просто не знаю, как с этим справиться.
Вот пример json:
[{
"blogTitle":"Practice blog",
"feedUrl":"http://feeds2.feedburner.com/asdf",
"guid":"asdf5-33f2-4a32-9495-8cd93f1f8252",
"jsonUrl":"https://hubapi.com/blog/v1/asdf-33f2-4a32-9495-8cd93f1f8252.json",
"moderated":false,
"moderators":["asdf@asdf.com"],
"portalId":42494,"webUrl":"blog.asdf.com/blog"
}]
Вот мой класс:
using System;
using System.Runtime.Serialization;
namespace Json
{
[DataContract()]
public class HubspotObject : IExtensibleDataObject
{
[DataMember(Name = "authorDisplayName")]
public string AuthorDisplayName { get; set; }
[DataMember(Name = "authorEmail")]
public string Link { get; set; }
[DataMember(Name = "blogGuid")]
public string BlogId { get; set; }
[DataMember(Name = "body")]
public string Body { get; set; }
[DataMember(Name = "createTimestamp")]
public int TimeStamp { get; set; }
[DataMember(Name = "draft")]
public bool Draft { get; set; }
[DataMember(Name = "guid")]
public string Guid { get; set; }
[DataMember(Name = "jsonUrl")]
public string JsonUrl { get; set; }
[DataMember(Name = "lastUpdateTimestamp")]
public int LastUpdate { get; set; }
[DataMember(Name = "metaDescription")]
public string MetaDescription { get; set; }
[DataMember(Name = "metaKeywords")]
public string MetaKeywords { get; set; }
[DataMember(Name = "portalId")]
public int PortalId { get; set; }
[DataMember(Name = "postAnalytics")]
public PostAnalytics PostAnalytics { get; set; }
[DataMember(Name = "publishTimestamp")]
public int PublishTimestamp { get; set; }
[DataMember(Name = "sendNotifications")]
public bool SendNotifications { get; set; }
[DataMember(Name = "summary")]
public string Summary { get; set; }
[DataMember(Name = "tags")]
public string[] Tags { get; set; }
[DataMember(Name = "title")]
public string Title { get; set; }
[DataMember(Name = "url")]
public string Url { get; set; }
// WCF stores any items we did not map here
public ExtensionDataObject ExtensionData { get; set; }
}
[DataContract()]
public class PostAnalytics : IExtensibleDataObject
{
[DataMember(Name = "comments")]
public int Comments { get; set; }
[DataMember(Name = "inboundLinks")]
public int InboundLinks { get; set; }
[DataMember(Name = "views")]
public int Views { get; set; }
// WCF stores any items we did not map here
public ExtensionDataObject ExtensionData { get; set; }
}
}
И, наконец, вот строка, где я десериализую:
using (MemoryStream stream = new MemoryStream(Encoding.Unicode.GetBytes(inputContent)))
{
// Convert the stream buffer to an object with our serializer.
return serializer.ReadObject(stream) as HubspotObject;
}
Опять же, все объекты обнуляются в этом после десериализации. Нет никаких исключений. Если я устанавливаю атрибут одного из свойств как «обязательный», он выдает исключение, когда не заполняется, что заставляет меня думать, что я как-то неправильно его анализирую.
Предложения? Заранее спасибо.