2009-09-24 11 views
6

Czy istnieje odpowiednik Atrybutu, który można umieścić na właściwościach obiektu w klasie .NET, który byłby odpowiednikiem XmlElement lub XmlAttribute?Odpowiednik XmlAttribute/XmlElement dla 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; } 
} 

ten zwróciłby XML podobne do następujących:

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

chciałbym mieć JavaScriptSerializer, używane przez 'Json' metoda ASP.NET MVC ram w klasie kontrolera:

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

zwraca te same rezultaty, sformatowanych tak:

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

Obecnie wyprowadzania obiekt z metody Json, zwraca:

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

Teraz zdaję sobie sprawę, ten przykład jest bardzo uproszczony i jedyne co robiłem tutaj jest zmienić obudowę nazwami własności, ale w bardziej zaawansowane scenariusze Mogę całkowicie zmienić nazwę właściwości na coś innego ...

System.Web.Script.Serialization zawiera atrybut ScriptIgnoreAttribute, ale po prostu mówi JavaScriptSerializer, aby zignorować właściwość podczas serializacji, nic nie wydaje się istnieć zmienić nazwy lub format rzeczywistej produkcji jednak?

Odpowiedz

2

Z serializatorem JavaScript (.NET 2.0), niezupełnie ... Z DataContractSerializer (.NET 4.0,), tak.


Zobacz
JavaScriptSerializer.Deserialize - how to change field names
dla wszystkich alternatyw masz.

Kiedy jesteś gotowy, aby uświadomić sobie, że wbudowana w serializatora nie jest naprawdę przydatna, należy Json.NET, dodać odwołanie do Newtonsoft.JSON, i zrobić to tak:

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