Pergunta

Estou escrevendo um pequeno aplicativo em VB.NET e gostaria que algumas classes pudessem ser gravadas em XML para servir como um recurso de "salvar".Já vi arquivos XSD usados ​​para gerar classes VB que podem se serializar dentro e fora do XML com muita facilidade.Como eu faria isso se tivesse algum formato XML pré-existente com o qual preciso me conformar, já que estou criando as classes sozinho?

Foi útil?

Solução

Use os namespaces System.Xml e System.Xml.Serialization.Eles descrevem classes que você pode usar para anotar os membros de suas classes com a tag correspondente.

Por exemplo (em C#):

[XmlRoot("foo")]
public class Foo
{
     [XmlAttribute("bar")] 
     public string bar;
     [XmlAttribute("baz")] 
     public double baz;
}

Ou em VB.NET (pode não estar completamente sintaticamente correto):

<XmlRoot ("foo")> _
Public Class Foo
     <XmlAttribute ("bar")>_
     Public bar As String
     <XmlAttribute ("baz")>_
     Public baz As String
End Class

Você pode então usar a classe XmlSerializer para gerar XML.

Em C#:

using(XmlSerializer xmls = new XmlSerializer(typeof(Foo)){
    TextWriter tw = new StreamWriter( "foo.xml" );
    //use it!
}

Ou VB:

Using xmls As New XmlSerializer(gettype(Foo)), _
    tw As TextWriter = New StreamWriter("foo.xml")

    ''//use it!
End Using

Referência.

Outras dicas

Já que você perguntou sobre como tornar isso 'fácil', há três regras a seguir que ajudarão a manter as coisas muito simples:

  1. Use apenas tipos de propriedades serializáveis
  2. Não use coleções ou arrays como propriedades que precisam ser serializadas
  3. Não tenha propriedades com efeitos colaterais “ruins”.Por “ruim”, quero dizer principalmente duas propriedades públicas que são apoiadas pelo mesmo campo privado subjacente.

Observe que, se você quebrar essas regras, provavelmente ainda poderá serializar sua classe, mas provavelmente será muito mais trabalhoso.

Para o item 2, uma solução rápida é usar uma tabela de dados ou conjunto de dados, já que são serializáveis.

Para usar um recurso simples de 'salvar', use a serialização .net xml [1] ou crie um DateSet na memória para persistir o 'estado do mundo' em quantas DateTables você achar adequado.Depende de quão complexo é o seu modelo de objeto que você está tentando persistir.

[1] exemplo mais simples que consegui encontrar rapidamente (C#, desculpe, mas você entenderá) http://www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top