Autor Beitrag
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 30.03.09 15:57 
Wenn ich den XmlSerializer ohne die Attribute des Serializers verwende, dann kann ich nicht so ohne weiteres ein Attribut ausgeben.

ausblenden XML-Daten
1:
<Element Attribute="Value=" />					


Gibt es ähnlich wie bei PHP eine Möglichkeit eine Eigenschaft in der zu serialisierenden Klasse zu definieren, welche als Attribut ausgegeben wird? Ich möchte die Attribute des Serializers nicht verwenden, da ich dann mein Datenmodell (zu serialisierende Klasse) schon im Code auf XML festlege, aber ich möchte sie unabhängig erhalten.

Danke.
Christian
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 01.04.09 17:06 
Ich glaube, ich muss mal präziser werden.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public class Foo
{
  public Foo()
  {
  }

  public String Changed = "timestamp";

  public String Bar = "Hello World";
}

Mit dem XmlSerializer erhalte ich folgendes XML ...

ausblenden XML-Daten
1:
2:
3:
4:
5:
<?xml version="1.0"?>
<Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Changed>timestamp</Changed>
  <Bar>Hello World</Bar>
</Foo>

Ich hätte es ja sehr gerne, dass Changed als XML-Attribut von Foo gespeichert wird. Es gibt die Möglichkeit mit den Attributen des XmlSerializer zu arbeiten ...

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public class Foo
{
  public Foo()
  {
  }

  [XmlAttribute("Changed", DataType = "string")]
  public String Changed = "timestamp";

  public String Bar = "Hello World";
}


Aber wenn ich diese Attribute in den Klassen verwende, dann ist die Klasse in gewisser Weise schon für XML spezifiziert. Das möchte ich gerne vermeiden. Es soll in meinen Datenmodellen möglichst keine Festlegung auf ein Datenformat einfließen. Gibt es noch eine andere Möglichkeit, die Definitionen der Eigenschaften der Klasse so abzuändern, dass der XmlSerializer diese als Attribut rendert? Bei PHP kann man Eigenschaften statisch implementieren und dadurch werden die Eigenschaften zum XML-Attribut. Bei C# geht das leider nicht.

An einer Antwort ist mir sehr gelegen, da meine Entwicklung sonst stark ins Stocken kommt.

Vielen Dank schonmal.

Christian
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 01.04.09 20:14 
Also zuerst einmal legt die Vergabe des Attributes ja nichts fest. Ein Attribut kann man nutzen, muss man aber nicht. Es behindert ja eine Serialisierung in CVS oder sonstwas anderes in keinster Weise.

Ich sehe da im Moment keine Möglichkeit, die nicht auch irgendwie eine "Festlegung" beinhaltet. Das einzige, von dem ich aber nicht genau weiß, ob man es dafür "missbrauchen" kann, sind XmlAttributeOverrides. Da könntest Du mal schauen ob das geht. Die Doku scheint recht ausführlich zu sein.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 02.04.09 08:59 
Oh ja, Danke. Das sieht sehr vielversprechend aus. Ich geb Rückmeldung.
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 03.04.09 18:58 
So, nun die Rückmeldung. Ich habe mir über die Attribute in der endgültigen XML Gedanken gemacht.

Ich implementiere meine Models jetzt so, dass ich keine Attribute im XML mehr benötige und es funktioniert einwandfrei. Bisher habe ich keinen neuen Anspruch entwickelt, Attribute verwenden zu wollen. Somit entfällt die Notwendigkeit, für eine XML-Serilisation Klassen von meinen Models ableiten zu müssen, in denen die XmlAttributeOverrides-Klasse verwendet wird. Damit erspare ich mir einen Haufen Entwicklungsarbeit.

Aber ich habe mir die XmlAttributesOverrides angesehen und denke, irgendwann wird sie sicher ihren Einsatz finden. Also, Danke für den Tip.

Thema erledigt.

Grüße und Danke
Christian