XML序列化与REST WCF Data Contract匹配时遇到的2个问题

问题一

XML序列化与RESTful WCF Data Contract不能匹配,无法传递类的值。

 

现象:

给类加上[Serializable]Attribute,可以成功序列化,但是WCF Service不能识别。发现XML序列化与WCF Data Contract中成员的顺序必须相同。


解决方案:

1.类的头部清空WCF Data Contract的默认命名空间(见代码)。

2.所有元素加上XML序列化和WCF DataMember的Order(见代码),包括被调用的类。

using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Xml.Serialization;

namespace MySchool.BLL.Model.Common.User
{
    [Serializable]
    [DataContract(Namespace = "")]
    public sealed class User
    {
        [DataMember(Order = 1)]
        [XmlElement(Order = 1)]
        public int id { get; set; }

        [DataMember(Order = 2)]
        [XmlElement(Order = 2)]
        public string userName { get; set; }

        [DataMember(Order = 3)]
        [XmlElement(Order = 3)]
        public string nickName { get; set; }

        //......

        private Profile m_profile = null;
        [DataMember(Order = 8)]
        [XmlElement(Order = 8)]
        public Profile Profile
        {
            get { return m_profile; }
            set { m_profile = value; }
        }
    }

    [Serializable]
    [DataContract(Namespace="")]
    public sealed class Profile
    {
        [DataMember(Order = 1)]
        [XmlElement(Order = 1)]
        public int id { get; set; }

        [DataMember(Order = 2)]
        [XmlElement(Order = 2)]
        public int nation { get; set; }

        [DataMember(Order = 3)]
        [XmlElement(Order = 3)]
        public int gender { get; set; }

        //...       
    }
}

 


问题二

遇上List类型,WCF Service又不能识别。

 

现象:

XML序列化的对象,Service无法识别。

 

解决方案:
给[XmlElement]Attribute加上List的完整Type(见代码)。

        [DataMember(Order = 11)]
        [XmlElement(Order = 11, Type = typeof(List<SchoolGradeClass>))]
        public List<SchoolGradeClass> SchoolGradeClassList { get; set; }    

 

 

面对上面这些问题,当Google未果的时候,该怎么办呢?经验和知识是你的救命稻草。技术是一个不断发展的事物,要求每一个技术人员终身学习的职业,学习应该成为程序员血液中的一份子!与各位技术战线的兄弟共勉。

 

 

转载于:https://www.cnblogs.com/MikeYao/p/3490405.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值