在返回同一对象类型的列表时,如何显示json对象名称/标签



这是我的班级

[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 };
    }

相关内容

  • 没有找到相关文章

最新更新