JSON和XML的类相同,但差别很小

时间:2018-11-27 11:31:35

标签: c# json xml wcf serialization

我正试图为Web 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生成的情况下使用注释确实可行吗?

0 个答案:

没有答案