C# 如何将网络响应映射到C类?
我正在尝试通过TCP/IP协议与服务器通信。以下是我的方法:C# 如何将网络响应映射到C类?,c#,serialization,deserialization,tcpclient,networkstream,C#,Serialization,Deserialization,Tcpclient,Networkstream,我正在尝试通过TCP/IP协议与服务器通信。以下是我的方法: private bool SendTcpRequest<T>(T request, Settings settings) { try { TcpClient client = new TcpClient(settings.Url, settings.Port); byte[] data = null; if
private bool SendTcpRequest<T>(T request, Settings settings)
{
try
{
TcpClient client = new TcpClient(settings.Url, settings.Port);
byte[] data = null;
if (!string.IsNullOrEmpty(request.ToString()))
data = Encoding.ASCII.GetBytes(request.ToString());
NetworkStream stream = client.GetStream();
if (stream.CanWrite)
stream.Write(data, 0, data.Length);
else
{
return false;
}
if (stream.CanRead)
{
byte[] myReadBuffer = new byte[client.ReceiveBufferSize];
IFormatter formatter = new BinaryFormatter();
do
{
var numberOfBytesRead = stream.Read(myReadBuffer, 0, client.ReceiveBufferSize);
responseMessage = new StringBuilder();
responseMessage.AppendFormat("{0}", Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead));
}
while (stream.DataAvailable);
}
else
{
return false;
}
stream.Close();
client.Close();
return true;
}
catch (ArgumentNullException e)
{
return false;
}
catch (SocketException e)
{
return false;
}
}
private bool SendTcpRequest(T请求、设置)
{
尝试
{
TcpClient client=新的TcpClient(settings.Url,settings.Port);
字节[]数据=null;
如果(!string.IsNullOrEmpty(request.ToString()))
data=Encoding.ASCII.GetBytes(request.ToString());
NetworkStream=client.GetStream();
if(stream.CanWrite)
stream.Write(数据,0,数据长度);
其他的
{
返回false;
}
if(stream.CanRead)
{
byte[]myReadBuffer=新字节[client.ReceiveBufferSize];
IFormatter formatter=新的BinaryFormatter();
做
{
var numberOfBytesRead=stream.Read(myReadBuffer,0,client.ReceiveBufferSize);
responseMessage=新的StringBuilder();
AppendFormat(“{0}”,Encoding.ASCII.GetString(myReadBuffer,0,numberOfBytesRead));
}
while(stream.DataAvailable);
}
其他的
{
返回false;
}
stream.Close();
client.Close();
返回true;
}
捕获(e)
{
返回false;
}
捕获(SocketException e)
{
返回false;
}
}
服务器将发送如下响应:
<TOPUPRESPONSE>
<RESULT>00</RESULT> // status of the transaction
<RESULTTEXT>transaction successful</RESULTTEXT> //description of the result code
<TERMINALID>69500002</TERMINALID>
<TXID>0803170919092</TXID>
<PRODUCTID>XYZ</PRODUCTID>
</TOPUPRESPONSE>
00//交易的状态
事务成功//结果代码的说明
69500002
0803170919092
XYZ
现在我有一个c#类来响应,我想知道如何将网络响应映射到我的类。我是个新手,我甚至不知道我的回复信息会是什么样子?有人能给出一些想法吗?如果您的工作就是基于这种休息创建一个类:
[XmlRoot(ElementName="TOPUPRESPONSE")]
public class TOPUPRESPONSE {
[XmlElement(ElementName="RESULT")]
public string RESULT { get; set; }
[XmlElement(ElementName="RESULTTEXT")]
public string RESULTTEXT { get; set; }
[XmlElement(ElementName="TERMINALID")]
public string TERMINALID { get; set; }
[XmlElement(ElementName="TXID")]
public string TXID { get; set; }
[XmlElement(ElementName="PRODUCTID")]
public string PRODUCTID { get; set; }
}
然后将其反序列化以将数据作为类使用:
XmlSerializer serializer = new XmlSerializer(typeof(TOPUPRESPONSE ));
MemoryStream memStream = new MemoryStream(Encoding.UTF8.GetBytes(inputString));
msg resultingMessage = (TOPUPRESPONSE)serializer.Deserialize(memStream);
或者使用StringReader:
XmlSerializer serializer = new XmlSerializer(typeof(TOPUPRESPONSE));
StringReader rdr = new StringReader(inputString);
msg resultingMessage = (TOPUPRESPONSE)serializer.Deserialize(rdr);