XML vs. INI   zodpovězená otázka

VB.NET, XML, .NET

Zdravim, do čeho lepší ukládat nastavení? Do XML nebo do INI souboru?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Při rozhodování o tom, kam ukládat nastavení aplikace je rozhodně dobré zvážit, jestli nepostačí mechanismus .NET frameworku vestavený - My.Settings. To je velmi snadný způsob, jak se k nastavení dostat, nemusíte řešit serializaci ani deserializaci a pole, která chcete ukládat, si jednoduše naklikáte. Designer Settings objektu (ke kterému se přistupuje přes My.Settings ve Visual Basicu a Properties.Settings.Default v C#) se nachází na kartě Settings v nastavení projektu. Application Settings mají samozřejmě také nevýhody - jmenovitě například nevestavěnou podporu pro verzování, ale jedná se o vývojářem rozšiřitelné třídy, takže si to každý může dopsat sám.

Application Settings

http://msdn.microsoft.com/en-us/library/...

My.Settings ve Visual Basicu

http://msdn.microsoft.com/en-us/library/...

Pokud se přesto rozhodnete nastavení aplikace zajišťovat sám, doporučuji Vám přiklonit se raději k XML (či XAML) než INI, CSV a podobně. Nenechte se tím XAMLem zmást, je to sice deklarativní způsob návrhu uživatelských rozhraní WPF, ale tam jeho použití zdaleka nekončí. Pokud si do WinForms aplikace nareferencujete potřebné knihovny WPF, můžete pomocí třídy XamlServices serializovat libovolný objekt do XAMLu.

Třída XamlServices

http://msdn.microsoft.com/en-us/library/...

Samotné XML pak též není od věci, ale budete s ním mít o něco více práce. Budete si muset získané hodnoty parametrů a podobně sám přetypovávat a hlavně budete muset napsat kód dost flexibilní na to, aby se uměl vypořádat s rozbitým XML vstupem (nejen syntakticky, ale například i z pohledu kdy deserializujete hodnotu 15 pro pole, které lze nastavit od 1 do 8 - XML soubory může samozřejmě editovat i nějaký zvědavý uživatel, ne pouze Váš software).

Visual Basic má skvělou podporu pro XML, můžete ho zapsat přímo do kódu následovně:

Dim myXmlElement As XElement = <Settings>
                                 <Users>
                                   <User FirstName="Alex" LastName="Clarai" />
                                 </Users>
                               </settings>

A přistupovat k němu pomocí speciální syntaxe: myXmlElement.<Users>.<User>.FirstOrDefault().@FirstName (kombinace speciálního acesoru a extension metody třídy Enumerable).

Můžete samozřejmě použít i standardní prostředky přístupu k uzlům (metody tříd XElement a XDocoument), ale pokud vyvíjíte ve VB, doporučuji přímé zápisy XML používat (například na šablonu pro default settings, pokud nabídnete uživateli nastavení resetovat nebo pokud budete potřebovat fallback když soubor nastavení chybí). Můj osobní názor je takový, že to přispívá k čitelnosti kódu, ale preference má samozřejmě každý jiné.

Dále budete muset dát pozor na to, aby XML bylo správně strukturované. Pokud vím, lze Visual Studio nějak donutit, aby XML dokumenty validovat proti dané DTD, možná pomocí XSD, přesně nevím.

Něco k XML ve Visual Basicu

http://msdn.microsoft.com/en-us/library/...

Ovšem jak vidíte, udělat vlastní správu XML nastavení pořádně není žádná legrace, a proto je možné také využít XML serializace. Zde opět připomenu XAML serializaci, ale pokud si nechcete do projektu tahat nic z Presentation Foundation, XML serializace je možnost, vypadá asi takto:

Public Class clsProduct

  Private mstrName As String
  Private mstrDescription As String
  Private mintQty As Integer

  Public Property Name() As String
    Get
      Name = mstrName
    End Get
    Set(ByVal Value As String)
      mstrName = Value
    End Set
  End Property

  Public Property Description() As String
    Get
      Description = mstrDescription
    End Get
    Set(ByVal Value As String)
      mstrDescription = Value
    End Set
  End Property

  Public Property Qty() As Integer
    Get
      Qty = mintQty
    End Get
    Set(ByVal Value As Integer)
      mintQty = Value
    End Set
  End Property

End Class

' serializace
  Dim objStreamWriter As New StreamWriter("C:\Product.xml")
  Dim x As New XmlSerializer(p.GetType)
  x.Serialize(objStreamWriter, p)
  objStreamWriter.Close()

Kód zobrazuje jen klíčové prvky (strukturu serializované třídy a samotnou serializaci), pro větší obraz následujte zdroj, ze kterého jsem čerpal či si vyhledejte další informace.

Zdroj:

http://support.microsoft.com/kb/316730

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Do standardních konfiguračních souborů pro .NET aplikace, což je XML.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky za odpovědi. Myslím, že zkusím to my.settings.

nahlásit spamnahlásit spam 4 / 4 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback