为什么 json2sharp 从我的 JSON 生成额外的 class?
Why did json2sharp generate an extra class from my JSON?
我使用 json2csharp 从我的 JSON 生成了一些 classes。当我使用 DataContractJsonSerializer
或 JsonConvert
反序列化时,一切正常,但我不明白为什么生成器会生成 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 结构。
我使用 json2csharp 从我的 JSON 生成了一些 classes。当我使用 DataContractJsonSerializer
或 JsonConvert
反序列化时,一切正常,但我不明白为什么生成器会生成 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 结构。