我有WCF Web服务,它具有正确的XML序列化POST方法
[OperationContract]
[WebInvoke(Method = "PUT", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml)]
void ScanPatient(PatientInfo patientInfo);
//...
[XmlRoot("PatientInfo")]
public class PatientInfo
{
[XmlElement("FirstName")]
public string FirstName { get; set; }
[XmlElement("LastName")]
public string LastName { get; set; }
[XmlElement("SSN")]
public string SSN { get; set; }
[XmlElement("Birthday")]
public DateTime? Birthday { get; set; }
[XmlElement("RequestedClientID")]
public Guid RequestedClientID { get; set; }
[XmlElement("patientId")]
public Guid patientId { get; set; }
}
我使用的WebRequest与此服务
private void ExecuteWebServiceCommand(string method, string command, string parameters = "")
{
var request = (HttpWebRequest)WebRequest.Create(new Uri(command));
request.ContentType = "application/xml";
request.Method = method;
string responseFromServer = null;
byte[] bytes = Encoding.UTF8.GetBytes(parameters);
request.ContentLength = bytes.Length;
using (var newStream = request.GetRequestStream())
{
newStream.Write(bytes, 0, bytes.Length);
}
var response = request.GetResponse();
}
它的工作原理进行沟通下一PUT方法完美的,如果parameters
一个格式用于:
<PatientInfo><FirstName>{0}</FirstName><LastName>{1}</LastName><RequestedClientID>{2}</RequestedClientID></PatientInfo>
很显然,我不想手动创建数据,因为每个新字段都需要更新模板。所以,我试图使用XMLSerializer
。
private string SerializeToString(object data)
{
if (data == null) return null;
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
using (var stringwriter = new System.IO.StringWriter())
{
var serializer = new XmlSerializer(data.GetType(), "");
serializer.Serialize(stringwriter, data, ns);
return stringwriter.ToString();
}
}
但是序列化PatientInfo
,当我得到一个结果:
"<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<PatientInfo>\r\n <FirstName>Andrew</FirstName>\r\n <LastName>Fox</LastName>\r\n <Birthday d2p1:nil=\"true\" xmlns:d2p1=\"http://www.w3.org/2001/XMLSchema-instance\" />\r\n <RequestedClientID>2c547deb-2395-4334-b1b0-58e6562b5843</RequestedClientID>\r\n <patientId>00000000-0000-0000-0000-000000000000</patientId>\r\n</PatientInfo>"
它不适合ExecuteWebServiceCommand
,给我(400)错误的请求例外。
那么,如何正确地将对象序列化为XML,使其适合这样的代码?或者我该如何使用模式代码来接受这些数据?
至少,我想知道,我如何配置序列化器来删除该“序言”的东西,并从结果控制字符。 – lentinant