Я пытаюсь использовать ту же структуру классов для функции веб-API, которая должна возвращать либо json, либо xml - в зависимости от того, что требуется клиенту.
Однако требования к структуре немного отличаются от json до xml..
XML должен выглядеть следующим образом:
<prtg>
<result>
<channel>First channel</channel>
<value>10</value>
</result>
<result>
<channel>Second channel</channel>
<value>20</value>
</result>
</prtg>
И JSON должен выглядеть следующим образом
{
"prtg": {
"result": [
{
"channel": "First channel",
"value": "10"
},
{
"channel": "Second channel",
"value": "20"
}
]
}
}
Я не могу сделать это взаимозаменяемым.
Классы, которые я сериализирую, таковы:
[DataContract]
public class PrtgModel
{
[DataMember]
public Prtg Prtg { get; set; } = new Prtg();
}
//[JsonObject(NamingStrategyType = typeof(Newtonsoft.Json.Serialization.CamelCaseNamingStrategy))]
[DataContract]
public class Prtg
{
[DataMember]
public IList<PrtgResult> Result { get; set; } = new List<PrtgResult>();
}
//[JsonObject(NamingStrategyType = typeof(Newtonsoft.Json.Serialization.CamelCaseNamingStrategy))]
[DataContract]
public class PrtgResult
{
[DataMember]
public string Channel { get; set; }
[DataMember]
public string Value { get; set; }
//[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
[DataMember]
public int? LimitMaxError { get; set; }
//[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
[DataMember]
public int? LimitMinError { get; set; }
//[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
[DataMember]
public string LimitErrorMsg { get; set; }
//[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
[DataMember]
public int? LimitMode { get; set; } // 0=no, 1=yes
}
Это дает правильный JSON, но если я запрашиваю XML, я также получаю элемент PrtgResult
.Глядя на https://docs.microsoft.com/en-us/dotnet/standard/serialization/controlling-xml-serialization-using-attributes#controlling-serialization-of-classes-using-xmlrootattribute-and-xmltypeattribute не совсем видно, как сгладить массив так, как мне нужно.
Возможно ли это с помощью аннотации без полного переопределения генерации xml?