2009-09-24 11 views
6

¿Existe un atributo equivalente que se pueda colocar en las propiedades del objeto en una clase .NET que realice el equivalente de XmlElement o XmlAttribute?XmlAttribute/XmlElement equivalent for JavaScriptSerializer

[XmlRoot("objects")] 
public class MyObjects: List<MyObject> { } 

[XmlRoot("object")] 
public class MyObject { 
    [XmlAttribute("name")] 
    public string Name { get; set; } 
    [XmlAttribute("title")] 
    public string Title { get; set; } 
} 

Esto volvería XML similar al siguiente:

<objects> 
    <object name="David" title="Engineer" /> 
    <object name="William" title="Developer" /> 
</objects> 

me gustaría tener la JavaScriptSerializer, utilizado por el método de ASP.NET MVC marcos 'JSON' en la clase controlador:

public ActionResult Search() { 
    // code to populate data object 
    return Json(data); 
} 

los mismos resultados con formato, así:

[{"name":"David","title":"Engineer"},{"name":"William","title":"Developer"}] 

Actualmente, la salida del objeto con el método JSON, devuelve:

[{"Name":"David"}, "Title":"Engineer"}, {"Name":"William", "Title":"Developer"}] 

Ahora, me doy cuenta de este ejemplo es muy simplificado y lo único que he hecho aquí es cambiar la carcasa de los nombres de propiedad sino en Escenarios más avanzados Puedo reasignar por completo el nombre de la propiedad a otra cosa ...

System.Web.Script.Serialization contiene un atributo ScriptIgnoreAttribute, pero esto simplemente le dice a JavaScriptSerializer que ignore la propiedad al serializar, no parece existir nada para cambiar los nombres o el formato de la salida real sin embargo?

Respuesta

2

Con el serializador de JavaScript (.NET 2.0), realmente no ...
Con DataContractSerializer (.NET 4.0,), sí.


Ver
JavaScriptSerializer.Deserialize - how to change field names
para todas las alternativas que tiene.

Cuando esté listo para darse cuenta de que la incorporada en el serializador no es realmente útil, utilice JSON.NET, agregue una referencia a Newtonsoft.JSON, y hacerlo de esta manera:

[JsonProperty(PropertyName = "FooBar")] 
public string Foo { get; set; }