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ć?

questionAnswers(8)

yourAnswerToTheQuestion