1. Frage:
Du kannst private Member serialisieren, siehe
hier.
Aber warum bitte alles private um Fehler zu vermeiden?
Ja, es ist sinnvoll, alles als private zu deklarieren, was nach Außen hin nicht sichtbar sein soll, aber das gilt längst nicht für alles.
Ok, Felder mache ich fast immer privat, höchstens mal protected, aber in der Regel nutze ich immer Properties um das genau fest legen zu können, wie die Werte geschrieben werden.
Da kann z.B. auch nur der Set-Accessor private sein, der Inhalt ist nach Außen aber trotzdem verfügbar.
2. Frage:
Bei relationalen Datenbanken liegen die Daten in Tabellen.
Eine Tabelle hat dabei Spalten und jede Spalte hat neben Namen noch einen Typ und ein paar weitere Informationen, wie z.B. ob der Wert NULL sein darf.
In der Regel schreibt man dann Klassen, die das gleiche Schema haben, wie die Tabelle (Property entspricht Column) und jedes Objekt ist dann eine Datenzeile.
Sowas wie Vererbung lassen sich aber nur über Umwege einrichten, es gibt aber auch Datenbanksysteme, die objektorientierung unterstützen, bloß habe ich noch keines genutzt.
Bei einem Adressbuch würde ich z.B. diese Tabellen erstellen:
Person
- Id: Integer
- FirstName: NVarChar(20)
- LastName: NVarChar(20)
- Birthday: DateTime
Und dazu dann noch Informationen für Adresse, etc. in anderen Tabellen.
Das jetzt genauer zu beschreiben würde aber vermutlich den Ramen sprengen, es gibt aber jede Menge Quellen im Internet, die weiter helfen. Vorne weg natürlich die msdn-Doku, die hat auch einige Tutorials, unter anderem auch zu Datenbanken.