você pode forçar a serialização de um valor de enumeração em um número inteiro? [duplicado]
-
02-07-2019 - |
Pergunta
Duplicate possíveis:
Como posso serializar um valor enum como um int / a>
Oi, tudo!
Eu estou querendo saber se há uma maneira de forçar a serialização de um valor de enumeração em seu valor inteiro, em vez de sua representação string.
Para colocá-lo em contexto: Estamos usando, em uma aplicação web que depende fortemente de serviços web, uma única baseclass para todos os nossos cabeçalhos de solicitação, de forma independente do tipo de solicitação.
Eu quero adicionar um campo de resultado para o cabeçalho, por isso vamos ter um lugar para passar dicas voltar para o aplicativo chamado de como a operação correu no lado do serviço web. Nós já temos uma enumeração declarada para esse efeito, mas uma vez que temos aplicações legadas que a chamada sobre os serviços web que podem não saber sobre esses enums, eu gostaria de enviar serialize esses valores como inteiros.
Nós já tivemos de reduzir a duração desses cabeçalhos usando o [XmlElement (ElementName = "representationOfAttributeName string")] porque ocasionalmente excedeu o comprimento máximo url IE, e gostaria de saber se há um Atributos semelhantes a força a serialização de valores enum em inteiros.
Alguém já ouviu falar de um tal atributo?
Como sempre, obrigado pela ajuda, Pascal
Solução
Enums fazer serialize para ints. Mas, geralmente, se você não gosta da maneira uma das suas propriedades fica serializado para XML, você pode simplesmente fazer isso:
[XmlIgnore]
public MyThing MyThing { get; set; }
[XmlElement("MyThing")]
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
public string MyThingForSerialization
{
get { return //convert MyThing to string; }
set { MyThing = //convert string to MyThing; }
}
Outras dicas
Enums NÃO serializar como int como padrão. Eu estou usando XMLSerializer para serializar uma classe e eu tenho o mesmo problema, como descrito.
(O exemplo de Matt Howells parece funcionar se você alterar o escopo de MyThingForSerialization ao público, mas eu gostaria de ver uma melhor implementação causa isso cria uma propriedade pública adicional)