这是我的班级
[DataContract(Name="Test")]
public class Test
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Type { get; set; }
}
[DataContract(Name="Root")]
public static class Root
{
[DataMember(Name="TestList")]
public static List<Test> TestList { get; set; }
}
Expected Json To be returned
{
"Test":[
{
"Name": "MyApp",
"Type": "web"
},
{
"Name": "MyDatabase",
"Type": "db"
}
]
}
Actual Json Returned
[
{
"Name": "MyApp",
"Type": "web"
},
{
"Name": "MyDatabase",
"Type": "db"
}
]
WebAPI方法返回对象
[HttpGet]
public IEnumerable<Test> Get()
{
return Root.TestList;
}
我面临的问题是,当我运行上述代码时,我会看到JSON数据以"实际"格式返回,但我很乐意以"预期格式"看到JSON(请参阅上面的格式)。
唯一的区别是数组的标签。我该如何放置这个标签?
我看着大量的JSON文档,但没有运气。请帮助。
您的方法正在返回List<Test>
,因此将其序列化为JSON数组。如果您想查看带有命名数组价值属性的JSON对象,则需要返回包含适当命名属性的POCO,例如您的Root
:
[HttpGet]
public Root Get()
{
return Root;
}
另外,您需要将名称从TestList
更改为Test
:
[DataContract(Name="Root")]
public class Root
{
[DataMember(Name="Test")] // Changed this
public List<Test> TestList { get; set; }
}
或,如果您的Root
包含您不需要序列化的其他属性,或者以其他方式无法序列化(因为它是静态的),您始终可以返回一些通用包装器,例如:
[DataContract]
public class RootWrapper<T>
{
[DataMember(Name = "Test")]
public T Test { get; set; }
}
,然后
[HttpGet]
public RootWrapper<IEnumerable<Test>> Get()
{
return new RootWrapper<IEnumerable<Test>> { Test = Root.TestList };
}