[英]C# REST dictionary DTO
为REST API设计DTO以获得语义上为字典的资源的最佳方法是什么?
示例:按年龄获取雇员数量->应该返回一组类型(int,int)的夫妇(年龄,数量)。
一个简单的方法应该是一个结构数组,例如:
[
{
age: 30,
number: 3
},
{
age: 31,
number: 4
},
{
age: 32,
number: 5
}
]
但这并没有强制要求密钥应该唯一。 在语义上,我宁愿使用字典,例如:
{
"30": 3,
"31": 4,
"32": 5
}
有没有一种方法可以在C#中定义这样的DTO,以便可以轻松地对其进行序列化/反序列化?
您的第二个Json
无效,应如下所示:
{
"30": 3,
"31": 4,
"32": 5
}
在c#
这只是一个Dictionary<string, int>
您可以使用Json.Net轻松进行反序列化/序列化
var result =JsonConvert.DeserializeObject<Dictionary<string, int>>(text);
var serialized = JsonConvert.SerializeObject(
new Dictionary<string, int> { { "1", 2 }, {"3",4}});
正如建议马克西姆- simkin在他的回答 ,词典都原生支持Json.Net 。
这是一个例子:
var result = JsonConvert.DeserializeObject<Dictionary<int, int>>(text);
var serialized = JsonConvert.SerializeObject(new Dictionary<int, int> { { 30, 3 }, { 31, 4}});
// here serialized == "{\"30\":3,\"31\":4,\"32\":5}"
如果有用,则在Nancy中通过DynamicDictionary类(在名称空间Nancy中)支持此序列化。 在NancyModule中,您可以创建如下模型:
DynamicDictionary dynamicDictionary = ToDynamicDictionary(dictionary);
return this
.Negotiate
.WithModel(dynamicDictionary)
.WithStatusCode(HttpStatusCode.OK);
然后,您必须使用以下帮助程序方法将密钥转换为字符串:
private static DynamicDictionary ToDynamicDictionary(IDictionary<int, int> dictionary)
{
DynamicDictionary result = new DynamicDictionary();
foreach (var pair in dictionary)
{
result.Add(pair.Key.ToString(CultureInfo.InvariantCulture), pair.Value);
}
return result;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.