在传输之前操作序列化对象的字符串/缓冲区



为了解决我的android应用程序中windows与linux换行符不匹配的问题,我只需将所有进入应用程序的数据(来自ASP.NET WebAPI REST服务)替换为"\r\n"子字符串,并对输出的数据执行相反的操作。

对于入站数据来说,这很容易,因为我已经引用了一个字符串,该字符串包含序列化json数据的中间副本,我只是在这个缓冲区上进行了替换

//...    
string recieveBuffer;
WebRequest request = WebRequest.Create(url);
//...
WebResponse wresponse = request.GetResponse();
using (StreamReader sr = new StreamReader(wresponse.GetResponseStream()))
{
    recieveBuffer = sr.ReadToEnd();
}
///////////////////////////////////////////////////////////////
recieveBuffer = recieveBuffer.Replace("rn","n");
///////////////////////////////////////////////////////////////
List<T> temp = JsonConvert.DeserializeObject<List<T>>(
    recieveBuffer,
    new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }
);
//...

但是,在传输之前没有中间字符串/缓冲区来保存序列化的json数据,这一切都发生在JsonSerializerSerialze()成员内部:

//...
string url = GetUrlRequest();
WebRequest request = WebRequest.Create(url);
//...
Stream requestStream = request.GetRequestStream();
StreamWriter streamWriter = new StreamWriter(requestStream, new UTF8Encoding(false, true));
JsonTextWriter jsonTextWriter = new JsonTextWriter(streamWriter);
serializer = JsonSerializer.Create(serializerSettings);
serializer.Serialize(jsonTextWriter, tabletData);
jsonTextWriter.Close();
streamWriter.Close();
requestStream.Close();
//...

因此,我正在寻找一种方法,在传输序列化json之前获得一个缓冲区,以便用"\r\n"替换所有"\n"字符串。

我重构了我的写/发送代码,如下所示:

//...
string url = GetUrlRequest();
StringBuilder sb = new StringBuilder();
TextWriter textWriter = new StringWriter(sb);
JsonTextWriter jsonTextWriter = new JsonTextWriter(textWriter);
JsonSerializer serializer = JsonSerializer.Create(serializerSettings);
serializer.Serialize(jsonTextWriter, tabletData);
/////////////////////////////////////////////////////////////////////////
string sendBuffer = sb.ToString();
sendBuffer = sendBuffer.Replace("n","rn");
/////////////////////////////////////////////////////////////////////////    
WebRequest request = WebRequest.Create(url);
//...
Stream requestStream = request.GetRequestStream();
streamWriter = new StreamWriter(requestStream, new UTF8Encoding(false, true));
streamWriter.Write(sendBuffer);
jsonTextWriter.Close();
streamWriter.Close();
requestStream.Close();

相关内容

  • 没有找到相关文章

最新更新