如何在xmlSerialization中序列化私有成员

时间:2014-06-20 06:44:52

标签: c# web-services serialization xmlserializer datacontractserializer

[DataContract()]
    public class Person
    {
        [DataMember()]
        private string _fname;
        [DataMember()]
        private string _lname;
        [DataMember()]
        public string _nickName;

        public Person(string f, string l)
        {
            _fname = f;
            _lname = l;

            _nickName = _fname + _lname.Substring(0, 1);
        }

        public string FullName()
        {
            return _fname + " " + _lname;
        }
    }

我得到了这个类,如果我编写自己的方法来序列化/ deSerialize我可以序列化所有成员(私有/公共)。当我在.net webservice中使用它时,只有公共成员才能获得序列化,而不是私有。我究竟做错了什么?搜索整个SO无法找到解决方案。有没有办法告诉webservice序列化所有成员(public.private,internal ..)

1 个答案:

答案 0 :(得分:0)

听起来好像您的webservice代理可能使用的是XmlSerializer,而不是DataContractSerializer。如果您与旧的asmx wbservices或非.net Web服务进行通信,有时可能会出现这种情况。尝试将私有字段更改为公共属性,看看是否有效。

[DataMember()]
public string _fname { get; set; }
[DataMember()]
public string _lname { get; set; }
[DataMember()]
public string _nickName { get; set; }

如果有效,那么您正在使用XmlSerializer。它无法序列化私有字段,但DatacontractSerializer可以。