Resumen: ¿Cómo correlao un nombre de campo en datos JSON con un nombre de campo de un objeto .Net cuando uso JavaScriptSerializer.Deserialize?JavaScriptSerializer.Deserialize - cómo cambiar los nombres de los campos
ya la versión: He los siguientes datos JSON venir a mí de una API de servidor (no codificado en .Net)
{"user_id":1234, "detail_level":"low"}
tengo el siguiente C# objeto para el que:
[Serializable]
public class DataObject
{
[XmlElement("user_id")]
public int UserId { get; set; }
[XmlElement("detail_level")]
public DetailLevel DetailLevel { get; set; }
}
Donde DetailLevel es una enumeración con "Bajo" como uno de los valores.
Esta prueba falla:
[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);
}
y los dos últimos afirma fallar, ya que no hay datos en esos campos. Si cambio los datos JSON a
{"userid":1234, "detaillevel":"low"}
Luego pasa. Pero no puedo cambiar el comportamiento del servidor, y quiero que las clases del cliente tengan propiedades bien nombradas en la expresión C#. No puedo usar LINQ to JSON porque quiero que funcione fuera de Silverlight. Parece que las etiquetas XmlElement no tienen ningún efecto. No sé de dónde saqué la idea de que eran relevantes en absoluto, probablemente no.
¿Cómo se hace la asignación de nombre de campo en JavaScriptSerializer? ¿Se puede hacer?
Odio 'JavaScriptSerializer'. 'JwtSecurityTokenHandler' lo usa a través de la propiedad estática' JsonExtensions.Serializer', lo que significa que cambiarlo durante el tiempo de ejecución podría afectar a otro código que espera que no se modifique. Muchas de estas clases son de esa manera, desafortunadamente. :( – NathanAldenSr