Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在xmlSerialization中序列化私有成员_C#_Web Services_Serialization_Xmlserializer_Datacontractserializer - Fatal编程技术网

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

C# 如何在xmlSerialization中序列化私有成员,c#,web-services,serialization,xmlserializer,datacontractserializer,C#,Web Services,Serialization,Xmlserializer,Datacontractserializer,我得到了这个类,如果我编写自己的方法来序列化/反序列化,我可以序列化所有成员(private/public)。然而,当我在.NETWebService中使用它时,只有公共成员获得序列化,而不是私有成员。我做错了什么?找遍了,所以找不到解决办法。有没有办法告诉webservice序列化所有成员(public.private,internal…)听起来您的webservice代理可能使用XmlSerializer,而不是DataContractSerializer。如果您正在与旧的asmx wbse

我得到了这个类,如果我编写自己的方法来序列化/反序列化,我可以序列化所有成员(private/public)。然而,当我在.NETWebService中使用它时,只有公共成员获得序列化,而不是私有成员。我做错了什么?找遍了,所以找不到解决办法。有没有办法告诉webservice序列化所有成员(public.private,internal…)

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

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

如果它能工作,那么您就是在使用XmlSerializer。它不能序列化私有字段,但DatacontractSerializer可以。

您尝试过声明它们吗?是的@Sayse,事实上我最初使用的是[serializable],这也遇到了同样的问题。然后我问了一个问题,但运气不好。使用的序列化程序是什么?XmlSerializer还是DataContractSerializer?我猜Web服务正在使用前者?那样的话,你能换成后者吗?后者可以轻松地处理这个问题(即使没有所有这些属性)。但是由于一些限制,我不能使用属性。如何要求VS使用DataContractSerializer而不是xml序列化程序。顺便说一句,我使用的是VS2010,我的webservice项目的.net framework是3.5,您的webservice是wcf webservice吗?还是ASP.NET.asmx?是的,这就是原因。如果您想使用DataContractSerializer对私有成员进行序列化,则必须访问WCF webserivces。请阅读这篇相关文章,尤其是#4。
[DataMember()]
public string _fname { get; set; }
[DataMember()]
public string _lname { get; set; }
[DataMember()]
public string _nickName { get; set; }