JavaScriptSerializer.Deserialize - jak zmienić nazwy pól
streszczenie: Jak odwzorować nazwę pola w danych JSON na nazwę pola obiektu .Net przy użyciu JavaScriptSerializer.Deserialize?
Dłuższa wersja: Mam następujące dane JSON przychodzące do mnie z serwera API (nie kodowane w .Net)
{"user_id":1234, "detail_level":"low"}
Mam dla niego następujący obiekt C #:
[Serializable]
public class DataObject
{
[XmlElement("user_id")]
public int UserId { get; set; }
[XmlElement("detail_level")]
public DetailLevel DetailLevel { get; set; }
}
Gdzie DetailLevel jest wyliczeniem z „Low” jako jedną z wartości.
Ten test kończy się niepowodzeniem:
[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);
}
Dwa ostatnie twierdzą, że nie działa, ponieważ w tych polach nie ma danych. Jeśli zmienię dane JSON na
{"userid":1234, "detaillevel":"low"}
Potem przechodzi. Ale nie mogę zmienić zachowania serwera i chcę, aby klasy klienta miały dobrze nazwane właściwości w idiomie C #. Nie mogę używać LINQ do JSON, ponieważ chcę, aby działał poza Silverlight. Wygląda na to, że znaczniki XmlElement nie działają. Nie wiem, gdzie wpadłem na pomysł, że w ogóle są istotne, prawdopodobnie nie są.
Jak zrobić mapowanie nazw pól w JavaScriptSerializer? Czy w ogóle można to zrobić?