我試圖通過包含一些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