2009-05-08 8 views
0

Ich erstelle serialisiertes XML für ein LINQ to SQL-Projekt mithilfe der DataContractSerializer-Klasse. Nach der Serialisierung und Überprüfung des zurückgegebenen Objekts erhalte ich XML, das so aussieht.Angeben der Struktur von serialisiertem XML mithilfe von DataContractSerializer

- <ContentObject xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MyProject.Data.Model"> 
    <_x003C_ID_x003E_k__BackingField>1</_x003C_ID_x003E_k__BackingField> 
    <_x003C_ObjectItemState_x003E_k__BackingField>Active</_x003C_ObjectItemState_x003E_k__BackingField> 
    <_x003C_ObjectName_x003E_k__BackingField>6ec555b0ba244ab4a8b2d2f2e7f4185a</_x003C_ObjectName_x003E_k__BackingField> ETC. 

Ich versuche, herauszufinden, wie die XML-Struktur zu vereinfachen, nur

- <ContentObject xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MyProject.Data.Model"> 
    <ID>1</ID> 
    <ObjectItemState>Active</ObjectItemStat> 
    <ObjectName>6ec555b0ba244ab4a8b2d2f2e7f4185a</ObjectName> ETC 

ich das Objekt-Wrapper

namespace MyProject.Data.Model 
{ 
    [Serializable] 
    public class ContentObject 
    { 
     [XmlAttribute("ID")] 
     public int ID { get; set; } 
     [XmlAttribute("ObjectName")] 
     public string ObjectName { get; set; }  
     [XmlAttribute("ObjectItemState")] 
     public string ObjectItemState { get; set; } ETC 
    } 
} 

aber dies nicht hilft die Dekoration haben versucht, sein. Kann mir jemand helfen, herauszufinden, was genau ich tun muss, um die XML-Struktur entweder innerhalb der Klasse oder in der DBML-Designer-Datei anzugeben? Jeder Link oder Artikel wäre auch sehr hilfreich. Vielen Dank!

Antwort

2

Wenn Sie die DataContractSerializer verwenden, wie Sie erwähnt haben, dann müssen Sie Ihre Struktur dekorieren mit [DataContract] und [DataMember] Attribute - nicht [Serializable] und [XmlAttribute] usw. (diese werden für normale und XML-Serialisierer verwendet).

Der DataContractSerializer ist ein reiner "Opt-In" -Serialisierer - nur die Felder und/oder Eigenschaften, die Sie speziell mit [DataMember] markieren, werden serialisiert; Im Gegensatz zum XmlSerializer, der deaktiviert ist - er serialisiert alles, es sei denn, es ist mit [XmlIgnore] markiert.

Marc

0

fand ich meine eigene Antwort: Ich-Technologie wurde das Mischen: ich die Klasse Dekorationen ändern musste wie folgt:

[Serializable] 
/// <summary> 
/// regular Object type, like Client or Poll 
/// </summary> 
[DataContract(Name = "ContentObject", Namespace = "http://www.myproject.dev")] 
public class ContentObject 
{ 
    [DataMember(Name = "ID")] 
    public int ID { get; set; } 
    [DataMember(Name = "ObjectName")] 
    public string ObjectName { get; set; } 
    [DataMember(Name = "ObjectItemState")] 
    public ItemState ObjectItemState { get; set; } ETC. 
+0

Sie schlugen mich auf meine Antwort von Sekunden :-) –

+0

Sie sind nicht mehr als XmlAttributeAttribute wirken als in der ursprünglichen Post. Sie ähneln mehr XmlElementAttributes. –

Verwandte Themen