c# ServiceContract的JSON返回值看起来与我所期望的不同
本文关键字:期望 看起来 ServiceContract JSON 返回值 | 更新日期: 2023-09-27 18:16:52
我有一个服务契约,我使用它就像一个API,有以下接口声明
namespace MyAPI
{
[ServiceContract(Namespace = "http://MyAPI")]
public interface IMyAPI
{
[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "GetSomething?someInt={someInt}", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Dictionary<string, List<string>> GetSomething(int someInt);
}
}
在实现中,我做了如下操作
namespace MyAPI
{
[ServiceBehavior]
public class MyAPI : IMyAPI
{
public Dictionary<string, List<string>> GetSomething(int someInt)
{
Dictionary<string, List<string>> something = new Dictionary<string, List<string>>();
something["FIRST KEY"] = new List<string>();
something["SECOND KEY"] = new List<string>();
// fill up these lists...
return something;
}
}
}
但是当我返回一些东西时我得到的是这样的格式
[{"Key":"FIRST KEY","Value":[]},{"Key":"SECOND KEY","Value":[]}]
我希望JSON看起来如下
{"FIRST KEY":[], "SECOND KEY":[]}
为什么两者有区别?我可以序列化成一个字符串,但这似乎是一个额外的(不必要的)步骤。如有任何帮助,不胜感激
这是因为"something"是一个容器->一个键值对列表。这就是为什么会得到["key<string>": value<Array<string>>]
的结构对不起,这只是我的符号。
所以字典转换为数组,因为它是集合。它的结构是保存恰好是引用类型的键值对。这就是为什么在JSON中使用对象表示法。该值还是一个字符串列表,这就是数组语法的原因。
你期望的结构描述一个对象有两个属性,如:
class SomeThing{
[DisplayName("FIRST KEY")]
List<string> FirstKey;
[DisplayName("SECOND KEY")]
List<string> SecondKey;
}