为什么 json2sharp 从我的 JSON 生成额外的 class?

Why did json2sharp generate an extra class from my JSON?

我使用 json2csharp 从我的 JSON 生成了一些 classes。当我使用 DataContractJsonSerializerJsonConvert 反序列化时,一切正常,但我不明白为什么生成器会生成 Message2 class。这不符合我的逻辑,我想清楚这一点。我认为 Message2 应该像 List<Message2> messages 一样用在 OfflineMessage 里面,而 Message1 class 需要删除。我错过了什么?

这些是由 json2csharp 生成的 classes(注意我将 Message 重命名为 Message1 为了更清楚的问题):

public class Message2
{
    public int status { get; set; }
    public string sender { get; set; }
    public string receiver { get; set; }
    public string msg { get; set; }
    public int timeStamp { get; set; }
    public string hash { get; set; }
    public string msgContext { get; set; }
}

public class Message1
{
    public Message2 message { get; set; }
}

public class OfflineMessage
{
    public int sequence { get; set; }
    public List<Message1> messages { get; set; }
}

public class Respons
{
    public OfflineMessage offlineMessage { get; set; }
}

public class RootObject
{
    public int __invalid_name__@pendingMsg { get; set; }
    public int __invalid_name__@syncStatus { get; set; }
    public List<Respons> responses { get; set; }
}

这是 JSON 的样子:

{
  "@pendingMsg": 0,
  "@syncStatus": 0,
  "responses": [
    {
      "offlineMessage": {
        "sequence": 2,
        "messages": [
          {
            "message": {
              "status": 6,
              "sender": "storng",
              "receiver": "JoilSp",
              "msg": "Hello my friend",
              "timeStamp": 1465398075,
              "hash": "+eq4cxwICbyNC31X5naQz3Z+R/Lxdw==",
              "msgContext": "+eq4cxwICbyNC31X5naQz3Z+R/Lxdw=="
            }
          },
          {
            "message": {
              "status": 6,
              "sender": "JioS",
              "receiver": "JoilSp",
              "msg": "nice)))",
              "timeStamp": 1465398075,
              "hash": "+eq4cxwICbyNC31X5naQz3Z+R/Lxdw==",
              "msgContext": "+eq4cxwICbyNC31X5naQz3Z+R/Lxdw=="
            }
          }
        ]
      }
    }
  ]
}

它正在创建一个 Message2 class 因为你的 messages 属性 是一个对象数组,那些对象 包含message 属性 中的其他对象。它需要一个 class 来表示 messages 数组的成员,另一个来表示 message 属性的值。

如果您负责您的 JSON 格式,那么像这样构建您的 JSON 可能会更清晰:

{
   "@pendingMsg":0,
   "@syncStatus":0,
   "responses":[
      {
         "offlineMessage":{
            "sequence":2,
            "messages":[
               {
                  "status":6,
                  "sender":"storng",
                  "receiver":"JoilSp",
                  "msg":"Hello my friend",
                  "timeStamp":1465398075,
                  "hash":"+eq4cxwICbyNC31X5naQz3Z+R\/Lxdw==",
                  "msgContext":"+eq4cxwICbyNC31X5naQz3Z+R\/Lxdw=="
               },
               {
                  "status":6,
                  "sender":"JioS",
                  "receiver":"JoilSp",
                  "msg":"nice)))",
                  "timeStamp":1465398075,
                  "hash":"+eq4cxwICbyNC31X5naQz3Z+R\/Lxdw==",
                  "msgContext":"+eq4cxwICbyNC31X5naQz3Z+R\/Lxdw=="
               }
            ]
         }
      }
   ]
}

这应该会产生您所期望的那种 class 结构。