Ich versuche, einige JSON in meiner Aktion zu analysieren, die dann die Dinge damit tun werden. Allerdings bekomme ich null
als mein Modell anstelle des ausgefüllten Modells.Parsen [FromBody] JSON: Modell Null
Dies ist die json ich zu analysieren, ich versuche:
{
"sameLanguages":true,
"sameDeadlines":true,
"sameDeliverables":false,
"quotations":[
{
"name":"zasd",
"deliverable":"538184e1-9a62-4ce9-baa7-ed746f267a9a",
"subtitleAssignments":{
"languageCombinations":[
{
"from":"d177b276-8f10-472f-84c6-f2ef59052a09",
"to":"d177b276-8f10-472f-84c6-f2ef59052a09",
"startDate":"19-09-2017",
"endDate":"19-09-2017"
}
],
"amount":12
},
"translationAssignments":{
"languageCombinations":[
]
}
}
]
}
Das ist meine Aktion:
[HttpPost]
public IActionResult Add([FromBody] SubmitQuotationsModel model)
{
//Do things...
return View();
}
Das sind meine Modelle:
public class SubmitQuotationsModel
{
public bool SameLanguages { get; set; }
public bool SameDeadlines { get; set; }
public bool SameDeliverables { get; set; }
public List<SubmitQuotationModel> Quotations { get; set; } = new List<SubmitQuotationModel>();
}
public class SubmitQuotationModel
{
public string Name { get; set; }
public string Deliverable { get; set; }
public List<AssignmentModel> SubtitleAssignments { get; set; }
public List<AssignmentModel> TranslationAssignments { get; set; }
}
public class AssignmentModel
{
public List<LanguageCombinationModel> LanguageCombinations { get; set; }
public int Amount { get; set; }
}
public class LanguageCombinationModel
{
public string From { get; set; }
public string To { get; set; }
public DateTimeOffset StartDate { get; set; }
public DateTimeOffset EndDate { get; set; }
}
Ich schicke die Json aus meinem Knockout/Typoskript-Skript als solches:
fetch('/Quotation/Add', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
credentials: 'include',
body: this.toJSON()
});
public toJSON(): string {
let model = {
sameLanguages: this.step1().sameLanguages(),
sameDeadlines: this.step1().sameDeadlines(),
sameDeliverables: this.step1().sameDeliverables(),
quotations: this.step2().quotations().filter((q) => q.isFilledIn()).map((q) => {
return {
name: q.name(),
deliverable: q.selectedDeliverable().id,
subtitleAssignments: this.getAssignmentModel(q.subtitleAssignmentGroup()),
translationAssignments: this.getAssignmentModel(q.translationAssignmentGroup())
}
})
};
return ko.toJSON(model);
}
private getAssignmentModel(model: AssignmentGroupModel) {
return {
languageCombinations: model.assignments().map((a) => {
return {
from: a.fromLanguage().value,
to: a.toLanguage().value,
startDate: a.startDate().format('DD-MM-YYYY'),
endDate: a.endDate().format('DD-MM-YYYY')
}
}),
amount: model.amount()
}
}
Ich bekomme keine Ausnahmen, der model
Parameter bleibt einfach null. Ich habe festgestellt, dass, wenn ich die SubtitleAssignments
und TranslationAssignments
in SubmitQuotationModel
kommentieren, es die anderen Teile des JSons deserialisiert gerade gut. Aber ich kann nicht herausfinden, warum es mit diesen zwei ...Assignments
Deklarationen, die nicht auskommentiert werden, nicht deserialisieren wird.
Können Sie den Code teilen, der den JSON der Controller-Aktion übermittelt? –
Diese 2 Zuordnungen sind Listen, in Ihnen json haben Sie keine eckigen Klammern für sie, sondern geschweifte Klammern. – TanguyB
Sie haben absolut recht. Ich kann nicht glauben, dass ich das verpasst habe. – nbokmans