C#REST字典DTO
为RESTAPI设计DTO以获取语义上为字典的资源的最佳方法是什么 示例:按年龄获取员工数量->应返回一组类型为(int,int)的夫妇(年龄,数量) 简单的方法应该是一组结构,如:C#REST字典DTO,c#,.net,json,deserialization,dto,C#,.net,Json,Deserialization,Dto,为RESTAPI设计DTO以获取语义上为字典的资源的最佳方法是什么 示例:按年龄获取员工数量->应返回一组类型为(int,int)的夫妇(年龄,数量) 简单的方法应该是一组结构,如: [ { age: 30, number: 3 }, { age: 31, number: 4 }, { age: 32, number: 5 } ] 但这并不强制要求密钥必须是唯一的。 从语义上
[
{
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#
中,它只是一本字典
您可以使用
var result=JsonConvert.DeserializeObject(文本);
var serialized=JsonConvert.serialized对象(
新词典{{“1”,2},{“3”,4});
您的第二个Json
无效,它应该如下所示:
{
"30": 3,
"31": 4,
"32": 5
}
在c#
中,它只是一本字典
您可以使用
var result=JsonConvert.DeserializeObject(文本);
var serialized=JsonConvert.serialized对象(
新词典{{“1”,2},{“3”,4});
正如中所建议的,字典本机受的支持
下面是一个例子:
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}"
var result=JsonConvert.DeserializeObject(文本);
var serialized=JsonConvert.serialized对象(新字典{30,3},{31,4});
//此处序列化==“{\'30\':3,\'31\':4,\'32\':5}”
正如中所建议的,字典本机受的支持
下面是一个例子:
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}"
var result=JsonConvert.DeserializeObject(文本);
var serialized=JsonConvert.serialized对象(新字典{30,3},{31,4});
//此处序列化==“{\'30\':3,\'31\':4,\'32\':5}”
如果有用,则通过DynamicDictionary类(在命名空间中)在中支持此序列化。在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;
}
专用静态动态字典(IDictionary dictionary)
{
DynamicDictionary结果=新建DynamicDictionary();
foreach(字典中的var对)
{
添加(pair.Key.ToString(CultureInfo.InvariantCulture)、pair.Value);
}
返回结果;
}
如果有用,则通过DynamicDictionary类(在命名空间中)在中支持此序列化。在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;
}
专用静态动态字典(IDictionary dictionary)
{
DynamicDictionary结果=新建DynamicDictionary();
foreach(字典中的var对)
{
添加(pair.Key.ToString(CultureInfo.InvariantCulture)、pair.Value);
}
返回结果;
}
无需将键转换为字符串:请参见@starnutodiopo您的示例中确实有字符串键,当然可以是int-int-dictionary,但在json中您有字符串键和int-value这是json语法:您不能有无引号的数字键!数字键必须被引用!看看json规范!不管怎么说,Json.Net也用引号将其序列化:尝试to Believen建议的示例,无需执行键到字符串的转换:请参阅@Starnutoditopo您的示例中确实有字符串键,请确保它可以是int-Dictionary,但是在json中有字符串键和int值这是json语法:不能有无引号的数字键!数字键必须被引用!看看json规范!无论如何,Json.Net也会用引号将其序列化:请尝试在上建议的示例