Como posso efetivamente persistir um objeto de fonte .Net?
-
02-07-2019 - |
Pergunta
Usecase: O usuário faz personalizações de fonte para um objeto na superfície de design, que eu preciso para carregar / salvar para meu armazenamento de dados. Ou seja, configurações como negrito, itálico, tamanho, necessidade Nome da fonte para persistiu.
Existe algum fácil (e confiável) mecanismo para converter / ler de volta a partir de uma representação de string do objeto de fonte (caso em que eu iria precisar de apenas um atributo)? Ou é várias propriedades combinadas com lógica personalizada a opção certa?
Solução
Use TypeConverter :
Font font = new Font("Arial", 12, GraphicsUnit.Pixel);
TypeConverter converter = TypeDescriptor.GetConverter(typeof (Font));
string fontStr = converter.ConvertToInvariantString(font);
Font font2 = (Font) converter.ConvertFromString(fontStr);
Console.WriteLine(font.Name == font2.Name); // prints True
Se você quiser usar a serialização XML pode criar invólucro classe Font que armazenará um subconjunto de propriedades de fonte.
Nota (Gishu) - Nunca o acesso de um conversor de tipo diretamente. Em vez disso, acessar o conversor apropriado usando TypeDescriptor. Muito importante:)
Outras dicas
No projeto que estou trabalhando, eu fui com as várias propriedades.
Eu salvar a fonte para uma tabela de banco de dados, quebrando seu nome, tamanho, estilo e unidade e, em seguida, persistem esses valores.
Recriando a fonte sob demanda uma vez que estes valores são retrived é um piscar de olhos.
Que tipo de armazenamento de dados que você precisa para persistir isto? Se é configurações do usuário apenas que pode ser mantido em um arquivo que você poderia publicando o objeto de fonte para um arquivo de configurações em binário ou XML (se você quer ser capaz de editar o arquivo de configuração diretamente). Os namespaces de serialização (System.Xml.Serialization e System.Runtime.Serialization) fornecer todas as ferramentas para fazer isso sem escrever código personalizado.
MSDN Site no XML de serialização: XML serialização no .NET Framework
[EDIT] Então aparrently o objeto de fonte não é serialisable. oops :( Desculpe.