JavaScriptSerializer.Deserialize - wie man Feldnamen ändert

Zusammenfassung: Wie ordne ich einen Feldnamen in JSON-Daten einem Feldnamen eines .Net-Objekts zu, wenn Sie JavaScriptSerializer.Deserialize verwenden?

Längere Version: Ich erhalte die folgenden JSON-Daten von einer Server-API (nicht in .NET codiert)

{"user_id":1234, "detail_level":"low"}

Ich habe das folgende C # -Objekt dafür:

[Serializable]
public class DataObject
{
    [XmlElement("user_id")]
    public int UserId { get; set; }

    [XmlElement("detail_level")]
    public DetailLevel DetailLevel { get; set; }
}

Dabei ist DetailLevel eine Aufzählung mit "Niedrig" als einem der Werte.

Dieser Test schlägt fehl:

[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);
}

Und die letzten beiden Zusicherungen schlagen fehl, da in diesen Feldern keine Daten vorhanden sind. Wenn ich die JSON-Daten in ändere

 {"userid":1234, "detaillevel":"low"}

Dann geht es vorbei. Ich kann das Serververhalten jedoch nicht ändern und möchte, dass die Clientklassen im C # -Idiom gut benannte Eigenschaften haben. Ich kann LINQ to JSON nicht verwenden, da es außerhalb von Silverlight funktionieren soll. Es sieht so aus, als hätten die XmlElement-Tags keine Wirkung. Ich weiß nicht, woher ich die Idee hatte, dass sie überhaupt relevant waren, wahrscheinlich auch nicht.

Wie mache ich die Zuordnung von Feldnamen in JavaScriptSerializer? Kann es überhaupt gemacht werden?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage