Те же классы для JSON и XML, но с небольшой разницей - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь использовать ту же структуру классов для функции веб-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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...