У меня сейчас есть DataContract для полезной нагрузки, которую я получаю от API. Проблема в том, что поля, возвращаемые в поле ad
, не всегда одинаковы. Иногда у них есть WelcomeTitle
, иногда нет. Иногда он имеет FeatureDesc1
, а иногда нет. Есть ли способ заставить это поле [DataMember(Name = "ad")]
каким-либо образом учитывать различные поля, которые могут возвращаться из API?
Одна идея, которая у меня была до сих пор, заключалась в том, что я мог десериализовать весь ответ в словарь JsonConvert.DeserializeObject<Dictionary<string, object>>(stringJson);
. Но я бы предпочел, чтобы весь ответ был объектом, на который я могу воздействовать.
Спасибо!
namespace something
{
[DataContract]
public class MyPayload
{
[DataMember(Name = "v")]
public string Version { get; set; }
[DataMember(Name = "ad")]
public IntroAd Properties { get; set; }
[DataMember(Name = "tracking")]
public IntroBeacons Tracking { get; set; }
}
[DataContract]
public class IntroAd // Not always guaranteed to have the same members
{
[DataMember(Name = "WelcomeTitle")]
public string WelcomeTitle { get; set; }
[DataMember(Name = "WelcomeSubtitle")]
public string WelcomeSubtitle { get; set; }
[DataMember(Name = "CallToAction")]
public string CallToAction { get; set; }
[DataMember(Name = "FeatureTitle0")]
public string FeatureTitle0 { get; set; }
[DataMember(Name = "FeatureDesc0")]
public string FeatureDesc0 { get; set; }
[DataMember(Name = "FeatureTitle1")]
public string FeatureTitle1 { get; set; }
[DataMember(Name = "FeatureDesc1")]
public string FeatureDesc1 { get; set; }
[DataMember(Name = "FeatureTitle2")]
public string FeatureTitle2 { get; set; }
[DataMember(Name = "FeatureDesc2")]
public string FeatureDesc2 { get; set; }
}
[DataContract]
public class IntroBeacons
{
[DataMember(Name = "baseUri")]
public Uri Uri { get; set; }
}
}