在C#中从Object转换Json时获取属性名称

时间:2020-05-05 10:51:34

标签: c# json json.net

我有一个类似如下的课程:

public class PCBulkRequest 
{ 
    public List<PCRequest> pcRequest { get; set; } 
}

当我试图将此类转换为JSON字符串时,我得到的是带有属性名称的JSON,这是我不想要的。

string json = JsonConvert.SerializeObject(pcRequest, Formatting.Indented);

结果:

{
  "pcRequest": [
    {
      "name": "John",
      "surname": "Elton"
    },
    {
      "name": "John",
      "surname": "Elton"
    }
  ]
}

预期结果:

[
  {
    "name": "John",
    "surname": "Elton"
  },
  {
    "name": "John",
    "surname": "Elton"
  }
]

2 个答案:

答案 0 :(得分:4)

只需直接序列化列表即可:

string json = JsonConvert.SerializeObject(pcRequest.pcRequest, Formatting.Indented);

顺便说一句,您的命名此刻有点令人困惑-听起来您有一个名为pcRequest的变量PCBulkRequest,并且您的pcRequest属性听起来应该像当它实际上是一个列表时,是一个单个请求。我会有这样的名字:

public class PCBulkRequest
{
    public List<PCRequest> Requests { get; set; }
}

...

var bulkRequest = GetBulkRequest(); // Wherever this comes from
string json = JsonConvert.SerializeObject(bulkRequest.Requests, Formatting.Indented);

答案 1 :(得分:4)

我们看不到您如何定义它,但是根据结果,您似乎发现代码中的pcRequest必须是PCBulkRequest类的实例。

因此,Json.NET将按照您的指示序列化整个对象。如果只想序列化列表,那么这很简单:您需要从该对象中提供列表作为要序列化的项目。

string json = JsonConvert.SerializeObject(pcRequest.pcRequest, Formatting.Indented);

Json.NET库只能序列化您告诉它的内容,它无法猜测您实际想要序列化的子部分!


我建议也许更清楚地命名您的变量,以便您不要将类中属性的名称作为该类实例的变量名称重复使用。可能会造成一些混乱。而且属性名称pcRequest是单数形式,因此听起来像它将容纳一个请求,而实际上它是一个列表-也可能引起混淆。如果您花时间给变量赋予有意义的,清晰的名称,那么您的代码将更加易于维护和理解(对您和他人而言)。

相关问题