您的位置:首页 > 其它

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

2013-12-26 12:10 453 查看
问题一

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未果的时候,该怎么办呢?经验和知识是你的救命稻草。技术是一个不断发展的事物,要求每一个技术人员终身学习的职业,学习应该成为程序员血液中的一份子!与各位技术战线的兄弟共勉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐