JSON.NET отлично десериализует его, но все, что mvc использует для привязки параметров контроллера, сложно. Могу ли я сделать что-нибудь еще, чтобы сделать эту работу?
Биты:
public partial class Question
{
public Dictionary<string, List<QuestionExtendedProp>> TemporaryExtendedProperties { get; set; }
}
И метод контроллера
[HttpPost]
public JsonResult SaveQuestions(Question[] questions)
{
var z =
JsonConvert.DeserializeObject(
"{'Options':[{'PropKey':'asdfasd','PropVal':'asdfalkj'},{'PropKey':'fdsafdsafasdfas','PropVal':'fdsafdas'}]}",
typeof (Dictionary<string, List<QuestionExtendedProp>>)) as Dictionary<string, List<QuestionExtendedProp>>;
//this deserializes perfectly. z is exactly what I want it to be
//BUT, questions is all wrong. See pic below
//lots of code snipped for clarity, I only care about the incoming questions object
return Utility.Save(questions);
}
Вот то, что MVC дает мне для этой точной строки (Вытащено из скрипача, дополнения оторваны для вашего удовольствия от чтения)
"TemporaryExtendedProperties":{"Options":
[{"PropKey":"NE","PropVal":"NEBRASKA"},
{"PropKey":"CORN","PropVal":"CHILDREN OF"},
{"PropKey":"COW","PropVal":"MOO"}]}
Почему MVC искажает привязку из этой совершенно тонкой строки json и как я могу заставить ее не делать этого? У меня есть полный контроль над структурой и созданием json.
Редактировать
Я попытался изменить тип Question.TeoraryExtendedProperties на List<KeyValuePair<string, List<QuestionExtendedProp>>>
, но это тоже не сработало. Вот новый json (который точно соответствует тому, что System.Web.Script.Serialization.JavaScriptSerializer
сериализует объект!)
{
TemporaryExtendedProperties: [
{
Key: 'Options',
Value: [
{
PropKey: 'NEBRASKA',
PropVal: 'NE'
},
{
PropKey: 'DOG',
PropVal: 'CORN'
},
{
PropKey: 'MEOW???',
PropVal: 'COW'
}
]
}
]
}
Это тоже не сработало. Он десериализуется контроллером до List<blah,blah>
должным образом, со счетом 1 (как и ожидалось), но оба Key
и Value
равны null
. Json.NET снова отлично с этим справляется.
Тьфу.