[英]post xml request tags order in wcf rest
I have wcf service, which gets data with POST request. 我有wcf服务,该服务通过POST请求获取数据。 When I send body like this:
当我像这样发送身体时:
<Package>
<sn>00001</sn>
<sign>6pG4K5T8Y5yqAcLJd37n3TLIwyg=</sign>
<xml_encoded>DQo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KPG9wPiAgICAgDQogICAgICA8aW5fc2F0IGxhdD0iMjYuNDU2ODc4OTEyMzQiIGxvbj0iNDkuNTY1NjEzNyIgc2F0PSI3IiBmbGc9IjEiIC8+DQo8L29wPg==</xml_encoded>
</Package>
My response is: "sn: 00001 sign: lat: 26.45687891234 lon: 49.5656137 sat: 7 flg: 1" but when i send it: 我的回应是:“ sn:00001号:lat:26.45687891234 lon:49.5656137 sat:7 flg:1”,但当我发送时:
<Package>
<sign>6pG4K5T8Y5yqAcLJd37n3TLIwyg=</sign>
<sn>00001</sn>
<xml_encoded>DQo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KPG9wPiAgICAgDQogICAgICA8aW5fc2F0IGxhdD0iMjYuNDU2ODc4OTEyMzQiIGxvbj0iNDkuNTY1NjEzNyIgc2F0PSI3IiBmbGc9IjEiIC8+DQo8L29wPg==</xml_encoded>
</Package>
my response is: "sn: 00001 sign: 6pG4K5T8Y5yqAcLJd37n3TLIwyg= lat: 26.45687891234 lon: 49.5656137 sat: 7 flg: 1" 我的回应是:“ sn:00001号:6pG4K5T8Y5yqAcLJd37n3TLIwyg = lat:26.45687891234 lon:49.5656137饱和度:7 flg:1”
Why so? 为什么这样?
code: 码:
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "GetData", ResponseFormat=WebMessageFormat.Json)]
string GetData(Package value);
}
public class Service1 : IService1
{
#region static methods
public static string HexStringFromBytes(byte[] bytes)
{
var sb = new StringBuilder();
foreach (byte b in bytes)
{
var hex = b.ToString("x2");
sb.Append(hex);
}
return sb.ToString();
}
private static string SHA1HashStringForUTF8String(string s)
{
byte[] bytes = Encoding.UTF8.GetBytes(s);
var sha1 = SHA1.Create();
byte[] hashBytes = sha1.ComputeHash(bytes);
return HexStringFromBytes(hashBytes);
}
private static string fromBase64(string str)
{
var bytes = Convert.FromBase64String(str);
var result = Encoding.UTF8.GetString(bytes);
return result;
}
private static string toBase64(string str)
{
var bytes = Encoding.UTF8.GetBytes(str);
var base64 = Convert.ToBase64String(bytes);
return base64;
}
#endregion
public string GetData(Package value)
{
var enc_pack = fromBase64(value.xml_encoded).Replace("\u000d\u000a", "");
//return enc_pack;
XDocument doc = XDocument.Parse(enc_pack);
var lat = doc.Root.Element("in_sat").Attribute("lat").Value;
var lon = doc.Root.Element("in_sat").Attribute("lon").Value;
var sat = doc.Root.Element("in_sat").Attribute("sat").Value;
var flg = doc.Root.Element("in_sat").Attribute("flg").Value;
return "sn: " + value.sn + " sign: " + value.sign + " lat: " + lat + " lon: " + lon + " sat: " + sat + " flg: " + flg;
}
}
I have found a solution 我找到了解决方案
[DataContract(Namespace = "")]
public class Package
{
[DataMember(Order = 0, IsRequired = true)]
public string sn { get; set; }
[DataMember(Order = 1, IsRequired = true)]
public string sign { get; set; }
[DataMember(Order=2, IsRequired=true)]
public string xml_encoded { get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.