代码之家  ›  专栏  ›  技术社区  ›  Ash Machine

使用DataContractSerializer指定序列化XML的结构

  •  0
  • Ash Machine  · 技术社区  · 16 年前

    我正在使用DataContractSerializer类为Linq to SQL项目创建序列化XML。在序列化和检查返回的对象之后,我得到了类似这样的XML。

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

    但这没用。有人能帮我找到在类或DBML设计器文件中指定XML结构所需的具体操作吗?任何链接或文章都会非常有帮助。谢谢!

    2 回复  |  直到 16 年前
        1
  •  2
  •   marc_s    16 年前

    如果您正在使用 DataContractSerializer 如你所说,那么你必须用 [DataContract] [DataMember] 属性-不是 [Serializable] [XmlAttribute] 等等(那些用于常规和XML序列化程序)。

    DataContractSerializer是一个严格的“选择性加入”序列化程序-仅限于那些特定标记的字段和/或属性。 [数据文件] 最终将被序列化;与选择退出的XmlSerializer相反,它将序列化所有内容,除非用 [XmlIgnore] .

    马克

        2
  •  0
  •   Ash Machine    16 年前

    我找到了自己的答案:我在混合技术:我需要改变班级装饰如下:

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