Chcę serializować typ wyliczeniowy, aby zwracał tablicę z wyliczeniami jako obiekt zawierający zarówno "wartość", "nazwę" i adnotację danych wartość. Potrzebuję pomocy w serializacji. Oto co zrobiłem do tej pory: wyliczenia:Niestandardowa serializacja Json.NET typu wyliczeniowego z adnotacją danych
public enum Status
{
[Display(Name="Active status")]
Active = 1,
[Display(Name = "Deactive status")]
Deactive = 2,
[Display(Name = "Pending status")]
Pending = 3
}
DTO obiektu, który powinien być w odcinkach:
public class ProjectDto
{
public Type StatusEnum { get; set; }
public Status CurrentStatus { get; set; }
}
Przypisanie wartości:
var project = new ProjectDto
{
CurrentStatus = Status.Active,
StatusEnum = typeof (Status)
};
var output = JsonConvert.SerializeObject(project);
Aby uzyskać wartości z wyliczenia używam:
Enum.GetNames(typeof(Status)) //To get the names in the enum
Enum.GetValues(typeof(Status)) //To get the values in the enum
uzyskać wartość nazwa adnotacji danych jest nieco trudniejsze, ale znalazłem pomoc w tym artykule: http://geeksharp.com/2011/11/02/power-up-your-enumerations/ Stworzyli metody pomocnika, który będzie uzyskać wartość zapisaną w adnotacji danych przy użyciu:
public static string GetAttributeValue<T>(this Enum e,
Func<T, object> selector) where T : Attribute
{
var output = e.ToString();
var member = e.GetType().GetMember(output).First();
var attributes = member.GetCustomAttributes(typeof(T), false);
if (attributes.Length > 0)
{
var firstAttr = (T)attributes[0];
var str = selector(firstAttr).ToString();
output = string.IsNullOrWhiteSpace(str) ? output : str;
}
return output;
}
I można uzyskać wartość używając:
.GetAttributeValue<DisplayAttribute>(y => y.Name)
Wyjście powinno być coś jak
{
statusEnum: [
{ "value": "1", "name": "Active", "label": "Active status" },
{ "value": "2", "name": "Deactive", "label": "Deactive status" },
{ "value": "3", "name": "Pending", "label": "Pending status" }
],
currentStatus: { "value": "1", "name": "Active", "label": "Active status" }
}
jak wspomniano Potrzebuję pomocy w tworzeniu niestandardowego Json.NET serializacji i deserializacji, aby uzyskać pożądany wynik. Jakakolwiek pomoc byłaby apriciated.
Czy właściwość 'CurrentStatus' jest tablicą? Ponadto, w jaki sposób 'StatusEnum', który jest typu' System.Type', jest serializowany do obiektu, który wygląda tak? –
Przepraszam, dobry połów. Tęskniłem za tym, że pomieszałem statusEnum i currentStatus na wyjściu, teraz naprawiłem.statusEnum powinien reprezentować typ wyliczania statusu wraz ze wszystkimi jego wartościami, podczas gdy currentStatus powinien reprezentować pojedynczą wartość wyliczenia, która została "wybrana". –