2009-05-08 3 views
0

Я создаю сериализованный XML для проекта LINQ to SQL с использованием класса DataContractSerializer. После сериализации и проверки возвращаемого объекта я получаю XML, который выглядит так.Задание структуры сериализованного XML с использованием 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. 

Я пытаюсь выяснить, как упростить структуру XML, чтобы быть просто

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

Я попытался украсить объект обертку

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

, но это не помогает. Может ли кто-нибудь помочь мне найти то, что мне нужно сделать, чтобы указать структуру XML, как внутри класса, так и в файле DBML Designer? Любая ссылка или статья будут очень полезны. Благодаря!

ответ

2

Если вы используете DataContractSerializer, как вы упомянули, то вы должны украсить вашу структуру с [DataContract] и [DataMember] атрибуты - не [Serializable] и [XmlAttribute] и т. Д. (Они используются для регулярных и XML-сериализаторов).

DataContractSerializer - это строго «селектор ввода» - только те поля и/или свойства, которые вы специально обозначили [DataMember], будут сериализованы; в отличие от XmlSerializer, который отказывается - он сериализует все, кроме случаев, когда он помечен [XmlIgnore].

Marc

0

Я нашел свой собственный ответ: Я смешивала технологии: мне нужно, чтобы изменить украшение класса следующим образом:

[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

Вы бьете меня к ответу секунд :-) –

+0

Они больше не действуют как XmlAttributeAttribute, как в исходном посте. Они напоминают больше XmlElementAttributes. – 2011-01-19 22:41:39

Смежные вопросы