내가 JSON으로 양식 데이터를 직렬화하고 데이터베이스에 저장 :Asp.Net Core : json에서 IFormCollection을 serialize하고 deserialize하는 방법은 무엇입니까? 컨트롤러에서
public IActionResult Edit(int id)
{
var doc = _context.Docs
.Where(o => o.Id == id).FirstOrDefault();
if (doc == null)
{
ViewData["ErrorMessage"] = "Not found";
return View("Error");
}
var formData = JsonConvert.DeserializeObject<IFormCollection>(doc.Content);
ViewData["FormData"] = formData;
return View(doc);
}
것은 위의가 발생합니다 :
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(IFormCollection formData)
{
var json = JsonConvert.SerializeObject(formData);
var doc = new Doc()
{
Subject = formData["subject"],
Content = json
};
_context.Docs.Add(doc);
_context.SaveChanges();
return RedirectToAction("Edit", new { Id = doc.Id });
}
지금, 나는 양식을 양식 데이터를 직렬화하고 재구성하고 싶습니다 deserialization의 예외 :
JsonSerializationException : 목록 형식 Microsoft.AspNetCore.Http.IFormCollection을 만들고 채울 수 없습니다. 경로 ', 1 줄, 위치 1.
형식을 지정하지 않으면 deserialization이 성공합니다. 하지만 을 IFormCollection으로 deserialize하는 것이 더 좋습니다. IFormCollection을 deserialize하는 적절한 방법은 무엇입니까?
또한 json을 저장하는 이유는 30 가지 유형의 양식을 처리하기 때문에 각 개체에 대해 강력한 형식의 모델 개체를 만들고 싶지 않기 때문입니다. 어떤 조언을 환영합니다.
구체적인 유형을 알지 못하면서 컴파일러가 인터페이스에 비 직렬화를 어떻게 기대합니까? 인터페이스에는 구현이 없으며 인터페이스는'new' 키워드로 인스턴스화 될 수 없습니다. 당신은 ** concrete ** 타입을 제공해야하거나 타입 내에서 serialize 할 때 (당신은 json 안에 _type (또는 그렇게) 속성을 가질 것입니다), 타입을 버리고 인터페이스로 다시 던지십시오 :'(IFormCollection) JsonConvert.DeserializeObject (doc.Content)' – Tseng