Резюме. Как сопоставить имя поля в данных JSON с именем поля объекта .Net при использовании JavaScriptSerializer.Deserialize?
Более длинная версия. У меня есть следующие данные JSON, поступающие ко мне из API-интерфейса сервера (не закодированного в .Net)
{"user_id":1234, "detail_level":"low"}
У меня есть следующий объект С# для него:
[Serializable]
public class DataObject
{
[XmlElement("user_id")]
public int UserId { get; set; }
[XmlElement("detail_level")]
public DetailLevel DetailLevel { get; set; }
}
Где DetailLevel - это перечисление с "низким" в качестве одного из значений.
Этот тест не выполняется:
[TestMethod]
public void DataObjectSimpleParseTest()
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
DataObject dataObject = serializer.Deserialize<DataObject>(JsonData);
Assert.IsNotNull(dataObject);
Assert.AreEqual(DetailLevel.Low, dataObject.DetailLevel);
Assert.AreEqual(1234, dataObject.UserId);
}
И последние два утверждения терпят неудачу, поскольку в этих полях нет данных. Если я изменил данные JSON на
{"userid":1234, "detaillevel":"low"}
Затем он проходит. Но я не могу изменить поведение сервера, и я хочу, чтобы клиентские классы имели хорошо названные свойства в идиоме С#. Я не могу использовать LINQ для JSON, так как хочу, чтобы он работал вне Silverlight. Похоже, что теги XmlElement не имеют никакого эффекта. Я не знаю, где у меня идея, что они актуальны, они, вероятно, не так.
Как вы выполняете сопоставление имени поля в JavaScriptSerializer? Можно ли это сделать вообще?