2009-05-08 4 views
0

Je crée un fichier XML sérialisé pour un projet LINQ to SQL à l'aide de la classe DataContractSerializer. Lors de la sérialisation et de l'inspection de l'objet retourné, j'obtiens XML qui ressemble à ceci.Spécification de la structure d'un fichier XML sérialisé à l'aide de 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. 

J'essaie de savoir comment simplifier la structure XML juste être

- <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 

J'ai essayé décorer l'objet 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 
    } 
} 

mais cela ne suffit pas. Quelqu'un peut-il m'aider à trouver exactement ce que je dois faire pour spécifier la structure XML, soit dans la classe, soit dans le fichier DBML Designer? Tout lien ou article serait très utile aussi. Merci!

Répondre

2

Si vous utilisez le DataContractSerializer comme vous l'avez mentionné, vous devez décorer votre structure avec des [DataContract] et [DataMember] attributs - pas [Serializable] et [XmlAttribute] et ainsi de suite (ceux-ci sont utilisés pour les sérialiseurs réguliers et XML). Le DataContractSerializer est un sérialiseur strictement "opt-in" - seuls les champs et/ou les propriétés que vous marquez spécifiquement avec [DataMember] finiront par être sérialisés; par opposition à XmlSerializer qui est opt-out - il sérialise tout sauf s'il est marqué avec [XmlIgnore].

Marc

0

J'ai trouvé ma réponse: je la technologie de mélange: je devais changer les décorations de classe comme suit:

[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

tu me bats à ma réponse en quelques secondes :-) –

+0

Ils ne sont plus que agissent XmlAttributeAttribute comme dans votre message original. Ils ressemblent plus à XmlElementAttributes. –

Questions connexes