【发布时间】:2015-07-28 16:14:50
【问题描述】:
我正在为一个有很多变体的主题而苦苦挣扎,但我似乎找不到适合我的主题,我认为这是因为我的 JSON 数组的方式。 我不是 C# 或 JSON 方面的专家,但我已经设法“几乎”让它工作。我需要掌握 JSON 将反序列化到的类。
当我运行代码时,我没有收到错误,只是 xKisokData var 中有一个空值。
我得到的 JSON 数据。他们是这两个不同的。
"{\"Event\": \"sConnection\",\"data[device]\": \"fb16f550-2ef1-11e5-afe9-ff37129acbf4\",\"data[mode]\": \"customer\",\"data[starttime]\": \"2015-07-22T16:07:42.030Z\",\"data[endtime]\": \"\"}"
"{\"Event\": \"Log\",\"data[id]\": \"2015-07-22T16:07:23.063Z\",\"data[messages][0][source]\": \"server\",\"data[messages][0][message]\": \"Server is listening on port 1553\"}"
我目前的代码:
// Read in our Stream into a string...
StreamReader reader = new StreamReader(JSONdataStream);
string JSONdata = reader.ReadToEnd();
JavaScriptSerializer jss = new JavaScriptSerializer();
wsKisokData[] xKisokData = jss.Deserialize<wsKisokData[]>(JSONdata);
我的班级:
namespace JSONWebService
{
[DataContract]
[Serializable]
public class KisokEvent
{
public string eventTrigger { get; set; }
}
[DataContract]
[Serializable]
public class KisokData
{
public string data { get; set; }
}
[DataContract]
[Serializable]
public class wsKisokData
{
public KisokEvent KDEvent { get; set; }
public List<KisokData> KDData { get; set; }
}
}
我确定我不了解反序列化过程。感谢您的帮助。
编辑: 我把 JSON 放在调试器的右上方,这里是字符串。
{
"Event": "sConnection",
"data[device]": "fb16f550-2ef1-11e5-afe9-ff37129acbf4",
"data[mode]": "customer",
"data[starttime]": "2015-07-22T16:07:42.030Z",
"data[endtime]": ""
}
{
"Event": "Log",
"data[id]": "2015-07-22T16:07:23.063Z",
"data[messages][0][source]": "server",
"data[messages][0][message]": "Server is listening on port 1553"
}
【问题讨论】:
-
“JSON”示例中的所有引用是因为您从 VS 调试器复制它们吗?
-
一种可能性是您的 JSON 对象中的属性似乎是
Event和Data。您对象的属性是KDEvent和KDData。如果更改 .NET 对象的属性以匹配会发生什么? -
这可能会回答你的问题:stackoverflow.com/questions/15253633/…
-
很好的句柄@dustmouse,但是那个没有工作,因为当你定义类时,“data[id]”c#抱怨你正在尝试创建一个数组。还是谢谢你。
-
您展示的两个 JSON 示例是对象(外部分隔符为
{})而不是数组(外部分隔符为[])。为什么要反序列化为数组?
标签: c# json json.net json-deserialization