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