Dodałem właściwość niestandardową, aby niektóre z moich przedmiotów tak:Jak dodać niestandardowy węzeł główny podczas serializacji obiektu za pomocą JSON.NET?
[JsonCustomRoot("status")]
public class StatusDTO
{
public int StatusId { get; set; }
public string Name { get; set; }
public DateTime Created { get; set; }
}
Atrybut jest bardzo prosta:
public class JsonCustomRoot :Attribute
{
public string rootName { get; set; }
public JsonCustomRoot(string rootName)
{
this.rootName = rootName;
}
}
Domyślne wyjście z Json.NET podczas szeregowania instancję obiektu jest to:
{"StatusId":70,"Name":"Closed","Created":"2012-12-12T11:50:56.6207193Z"}
teraz pytanie brzmi: Jak mogę dodać korzeń-węzeł do JSON z wartością niestandardowego attrib Ute jak tak:
{status:{"StatusId":70,"Name":"Closed","Created":"2012-12-12T11:50:56.6207193Z"}}
Znalazłem kilka artykułów przywołujące interfejs IContractResolver, ale nie mogę zrozumieć, jak to zrobić. Moje próby obejmują ten niedokończony fragment kodu:
protected override JsonObjectContract CreateObjectContract(Type objectType)
{
JsonObjectContract contract = base.CreateObjectContract(objectType);
var info = objectType.GetCustomAttributes()
.SingleOrDefault(t => (Type)t.TypeId==typeof(JsonCustomRoot));
if (info != null)
{
var myAttribute = (JsonCustomRoot)info;
// How can i add myAttribute.rootName to the root from here?
// Maybe some other method should be overrided instead?
}
return contract;
}
Też szukam czegoś takiego, nie chcę zawijać moich odpowiedzi na kontrolerach dla każdego 'GET', szukałem sposobu, aby to zrobić jako ustawienie lub niestandardowy atrybut na każdym modelu. – MilkyWayJoe
Idealnie, chciałbym zrobić prawie tak samo jak twój, ale wrócę jako tablica, nawet jeśli zwracany jest tylko jeden obiekt, np .: '{status: [{" StatusId ": 70," Name ":" Closed "," Utworzono ":" 2012-12-12 T11: 50: 56.6207193Z "}]}'. Próbuję również z 'IContractResolver' i JSON.NET – MilkyWayJoe
Blogowałem o rozwiązaniu specyficznym dla api internetowej na http://www.emadibrahim.com/2014/04/09/emberjs-and-asp-net-web-api-and -json-serialization/ – Emad