我试图通过包含一些JSON的隐藏文本字段将一些数据发布到我的MVC 3控制器。我有通过字符串coursesList传入的JSON。任何人都有一个想法,为什么这不起作用?反序列化C#的JSON字符串
我所做的只是将JSON字符串中的字节[]写出来,写入MemoryStream,并反序列化那个流 - 或者试图。 BookCourse bc总是以null属性结束。
这里的东西,如JSON我会使用:
[{"coursesection":"1234","netlogon":"jsmith","label":"CRSE-1313 Generic Course Titling ~ Joe Smith"}]
而这里的对象被反序列化为:
using System.Runtime.Serialization;
namespace xxxx.Models
{
[DataContract]
public class BookCourse
{
[DataMember]
public string coursesection { get; set; }
[DataMember]
public string netlogon { get; set; }
[DataMember]
public string label { get; set; }
}
}
最后,控制器动作的代码来做到这一点 -
var byteArray = Encoding.ASCII.GetBytes(coursesList);
// Deserialize byte array to data type
var stream = new MemoryStream();
stream.Write(byteArray, 0, byteArray.Length);
var crs = new DataContractJsonSerializer(typeof(BookCourse));
stream.Position = 0;
// Read stream to object
ad.CourseSectionIDs = new List<int>();
try
{
var bc = (BookCourse) crs.ReadObject(stream);
while (bc.coursesection != null)
{
cs.AssociateCourseBook(bc.netlogon, bc.coursesection, ad.ISBN);
bc = (BookCourse)crs.ReadObject(stream);
}
}
catch (System.Runtime.Serialization.SerializationException e)
{
// Is this best practice for handling "none"?
}
后你发送的JSON的一个样本。 – f0x
您是否已经通过调试器了解了发生了什么? – markpsmith
您是否通过ajax调用发布json对象?如果是这样,只需在动作签名中有一个相应的参数(属性coursesection,netlogon&label)就可以开箱即用。 – nieve