С# - отправить byte [] как часть объекта json с использованием HttpWebRequest

Я пытаюсь отправить объект json в качестве части данных сообщения в веб-api. Некоторые значения json могут быть байтами []. Это вообще возможно? Если да, то как?

Вот мой код:

public static dynamic ExecuteAndReturn(string url, string contentType, string requestType, Dictionary<string, object=""> parameters)
 {
 try
 {
 System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
 string postData = "";
 if (contentType.Contains("json"))
 postData += "{";
 foreach (string key in parameters.Keys)
 {
 object value = parameters[key];
 if (value.GetType() == typeof(bool))
 value = value.ToString().ToLower();
 else if (value.GetType() == typeof(byte[]))
 value = //What to do
 if (contentType.Contains("json"))
 postData += HttpUtility.UrlEncode(key) + ":" + HttpUtility.UrlEncode(value.ToString()) + ",";
 else
 postData += HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(value.ToString()) + "&";
 }
 if (contentType.Contains("json"))
 {
 if (postData.Length > 1)
 postData = postData.Substring(0, postData.Length - 1);
 postData += "}";
 }
 byte[] data = Encoding.ASCII.GetBytes(postData);
 request.ContentLength = data.Length;
 request.ContentType = contentType;
 request.Method = requestType;
 request.CookieContainer = new System.Net.CookieContainer();
 foreach (string key in HttpContext.Current.Request.Cookies)
 {
 HttpCookie cookie = HttpContext.Current.Request.Cookies[key];
 request.CookieContainer.Add(new System.Net.Cookie(cookie.Name, cookie.Value, cookie.Path, new Uri(url).Host));
 }
 using (var sr = request.GetRequestStream())
 {
 sr.Write(data, 0, data.Length);
 sr.Close();
 }
 System.Net.WebResponse response = request.GetResponse();

 using (var sr = new System.IO.StreamReader(response.GetResponseStream()))
 {
 string json = sr.*********();
 System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex("\\\"__type\\\":\\\"[a-zA-Z]+[\\.]*[a-zA-Z]+\\\",");
 foreach (System.Text.RegularExpressions.Match match in r.Matches(json))
 {
 json = json.Replace(match.Value, "");
 }
 return (new JavaScriptSerializer()).Deserialize<dynamic>(json);
 }
 }
 catch (System.Net.WebException exception)
 {
 System.Net.HttpWebResponse errorResponse = (System.Net.HttpWebResponse)exception.Response;
 System.IO.Stream resst = errorResponse.GetResponseStream();
 System.IO.StreamReader sr = new System.IO.StreamReader(resst);
 string text = sr.*********();
 return new { Error = text };
 }
 }
</dynamic></string,>

Вызов функции выглядит следующим образом:

ExecuteAndReturn(
 Objects.SiteContext.Settings["Some_Url"].Value + "/SignOut",
 "application/json; charset=UTF-8",
 "POST",
 new Dictionary<string, object="">()
 {
 { "userName", someByte[] },
 { "key", anotherByte[] }
 });
</string,>

Каким должно быть значение байта [] при назначении его здесь:

foreach (string key in parameters.Keys)
 {
 object value = parameters[key];
 if (value.GetType() == typeof(bool))
 value = value.ToString().ToLower();
 else if (value.GetType() == typeof(byte[]))
 value = //this should be the byte[] value, what to do
 if (contentType.Contains("json"))
 postData += HttpUtility.UrlEncode(key) + ":" + HttpUtility.UrlEncode(value.ToString()) + ",";
 else
 postData += HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(value.ToString()) + "&";
 }
1 ответ

Если вы не можете закодировать нормальную строку и декодировать ее на сервере, попробуйте строку с форматированием json.

byte[] value = new byte[] { 255, 255, 255, 255 };
 string strValue = "[ ";
 for (int i = 0; i < value.Length; i++)
 strValue += (i == 0 ? "" : ", ") + value[i].ToString();
 strValue += " ]";

 // strValue == "[ 255, 255, 255, 255 ]"

licensed under cc by-sa 3.0 with attribution.