【发布时间】:2016-02-16 09:24:19
【问题描述】:
我正在尝试反序列化这个 JSON 对象,然后将其插入数据库:
{
"PresiderEmailAddress": "kyitss@gmail.com",
"MeetingNumber": "ME021616",
"MeetingName": " Quotation Meeting",
"MeetingDescription": "NULL",
"MeetingDate": "2\/16\/2016",
"MeetingVenue": "Consular Room",
"TimeStarted": "12:00:00",
"TimeEnded": "13:00:00",
"CompletionRate": 0.0,
"Remarks": "Actions still in progress"
}
但是我的 WCF 服务总是给我这个错误
无效的 JavaScript 属性标识符字符:}。路径 '',第 1 行,位置 19。
我在这里做错了什么?这是我的代码,顺便说一句:
public Int32 InsertMeeting(string jsonMeetingDetails)
{
MeetingDetailsForDeserializing obj = JsonConvert.DeserializeObject<MeetingDetailsForDeserializing>(jsonMeetingDetails);
using (SqlConnection connection = new SqlConnection(constring))
{
Int32 insertResult;
SqlCommand cmd = new SqlCommand("Insert into dbo.Meeting(MeetingNumber, PresiderEmailAddress, MeetingName, MeetingDescription, MeetingDate, MeetingVenue, TimeStarted, TimeEnded,CompletionRate, Remarks) values(@MeetingNumber, @PresiderEmailAddress,@MeetingName, @MeetingDescription, @MeetingDate, @MeetingVenue, @TimeStarted, @TimeEnded, @CompletionRate, @Remarks)");
cmd.CommandType = CommandType.Text;
cmd.Connection = connection;
cmd.Parameters.AddWithValue("@MeetingNumber", obj.jMeetingNumber);
cmd.Parameters.AddWithValue("@PresiderEmailAddress", obj.jPresiderEmailAddress);
cmd.Parameters.AddWithValue("@MeetingName", obj.jMeetingName);
cmd.Parameters.AddWithValue("@MeetingDescription", obj.jMeetingDescription);
cmd.Parameters.AddWithValue("@MeetingDate", obj.jMeetingDate);
cmd.Parameters.AddWithValue("@MeetingVenue", obj.jMeetingVenue);
cmd.Parameters.AddWithValue("@TimeStarted", obj.jTimeStarted);
cmd.Parameters.AddWithValue("@TimeEnded", obj.jTimeEnded);
cmd.Parameters.AddWithValue("@CompletionRate", obj.jCompletionRate);
cmd.Parameters.AddWithValue("@Remarks", obj.jRemarks);
connection.Open();
insertResult = cmd.ExecuteNonQuery();
connection.Close();
if (insertResult == 1)
{
return 1;
}
else
{
return 0;
}
}
}
编辑 我昨晚在寻找示例,似乎我用来反序列化对象的类与 JSON 不匹配。而且根据下面的帖子,我把它改成了这样:
[DataContract]
public class MeetingDetailsForDeserializing
{
[DataMember(Order = 0)]
public string jPresiderEmailAddress { get; set; }
[DataMember(Order = 1)]
public string jMeetingNumber { get; set; }
[DataMember(Order = 2)]
public string jMeetingName { get; set; }
[DataMember(Order = 3)]
public string jMeetingDescription { get; set; }
[DataMember(Order = 4)]
public string jMeetingDate { get; set; }
[DataMember(Order = 5)]
public string jMeetingVenue { get; set; }
[DataMember(Order = 6)]
public string jTimeStarted { get; set; }
[DataMember(Order = 7)]
public string jTimeEnded { get; set; }
[DataMember(Order = 8)]
public decimal jCompletionRate { get; set; }
[DataMember(Order = 9)]
public string jRemarks { get; set; }
}
对此:
[DataContract]
public class MeetingDetailsForDeserializing
{
[DataMember(Order = 0)]
public string PresiderEmailAddress { get; set; }
[DataMember(Order = 1)]
public string MeetingNumber { get; set; }
[DataMember(Order = 2)]
public string MeetingName { get; set; }
[DataMember(Order = 3)]
public string MeetingDescription { get; set; }
[DataMember(Order = 4)]
public string MeetingDate { get; set; }
[DataMember(Order = 5)]
public string MeetingVenue { get; set; }
[DataMember(Order = 6)]
public string TimeStarted { get; set; }
[DataMember(Order = 7)]
public string TimeEnded { get; set; }
[DataMember(Order = 8)]
public decimal CompletionRate { get; set; }
[DataMember(Order = 9)]
public string Remarks { get; set; }
}
但我仍然必须对其进行测试,看看它是否有效。顺便说一句,我如何使用 Fiddler 进行测试?
编辑好吧,当我在 Fiddler 上测试时,WCF 又给了我一个错误:
解析值时遇到意外字符:d。路径'',第 0 行,第 0 位置。
我检查了 JSON 示例。不可能有未知字符。
【问题讨论】:
-
调试的时候,反序列化后obj是否真的包含正确的数据?
-
调试的时候,jsonMeetingDetails字符串真的是这样的吗?它可能是 HTML 编码的吗?还是包含转义字符?编辑:实际上它看起来可能是由 MeetingDate 中的转义字符引起的
-
@FelixAv 我什至看不到数据,因为它不断给我 Invalid Javascript 错误
-
@MaxJ 我想是的。我会试试看这是否真的是问题