この json 文字列を ac# オブジェクトに逆シリアル化する際に問題が発生しています。モデルのさまざまな構成を試してみましたが、コードをシリアル化し、mvc 値プロバイダーにこれを実行させようとしましたが、動作させることができません.....だから、この JSON 文字列を自分のコントローラーを作成し、それをオブジェクトに入れ、正しいオブジェクトを作成してデータベースにスローします。
[ArgumentNullException: Value cannot be null.
Parameter name: value]
Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) +162
Newtonsoft.Json.JsonConvert.DeserializeObject(String value, JsonSerializerSettings settings) +66
InSight.Controllers.QuestionController.CreateSimpleQuestion(String json) +25
これは、コントローラーに送信する前の文字列です。
var data = JSON.stringify({
QuestionTitle: title,
Keywords: key,
Description: desc,
Comments: comments,
QuestionType: type,
choices: {
DisplayText: text,
OrderNumber: order,
is_correct:is_correct
}
});
これはコントローラーメソッドです:
public ActionResult CreateSimpleQuestion(string json)
{
SimpleQuestion temp = JsonConvert.DeserializeObject<SimpleQuestion>(json);
Question question = new Question();
question.QuestionTitle = temp.QuestionTitle;
question.QuestionType = temp.QuestionType;
question.Keywords = temp.Keywords;
question.is_counted = true;
question.DateCreated = DateTime.Now;
question.Comments = temp.Comments;
question.QuestionType = "Simple";
db.Questions.Add(question);
db.QuestionChoices.Add(temp.choices.First());
db.SaveChanges();
return RedirectToAction("Index");
}
これがモデルです:
public class SimpleQuestion
{
public int QuestionId { get; set; }
public string QuestionTitle { get; set; }
public DateTime DateCreated { get; set; }
public string QuestionType { get; set; }
public string Keywords { get; set; }
public bool is_counted { get; set; }
public string Description { get; set; }
public string Comments { get; set; }
public List<QuestionChoices> choices { get; set; }
}
最後に、これは渡される実際のデータ文字列です。
{"QuestionTitle":"This is the Question Title",
"Keywords":"Blue pony, sharks",
"Description":"This is the description field.",
"Comments":"No comment has been left.",
"choices":{
"DisplayText":"Will it rain tomorrow?",
"OrderNumber":"1","is_correct":false
}
}
解決策data
定義されて
いる JS を次のように変更します。
var data = {
"QuestionTitle": title,
"Keywords": key,
"Description": desc,
"Comments": comments,
"QuestionType": type,
"choices": {
"DisplayText": text,
"OrderNumber": order,
"is_correct":false
}
};