当 RESPONSE 用外语写两个字段时,C# 中的 Json 响应出现问题
Issue with Json Response in C# when RESPONSE write two fields in foreign language
我在 c# 中使用 HTTP 编写 Web 服务 RESPONE.WRITE
json 回答,但问题是当我 return json 的某些字段包含希伯来语时,之后 json 响应未满,结束括号未命中..我把代码放在 C# 和 json 字符串
的响应中
json 带有希伯来语字段的响应
{"Response":"OK","FName":"איגור","LName":"kurylo","User_Name":"0524858214","ErrorMsg":"P
json 英文字段响应规则:
{"Response":"OK","FName":"igor","LName":"kurylo","User_Name":"0524858218","ErrorMsg":"Pass"}
并在网络服务中获取我的代码
这是 json 响应的模型
public class Android_Reg
{
public string Response { get; set; }
public string FName { get; set; }
public string LName { get; set; }
public string User_Name { get; set; }
public string ErrorMsg { get; set; }
}
string l = Convert.ToString(jSon.Serialize(reg).ToString().Length);
string jsonr = jSon.Serialize(reg).ToString();
var json = JsonConvert.SerializeObject(reg, Formatting.Indented);
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.Charset = "utf-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.ContentType = "application/json";
HttpContext.Current.Response.AddHeader("content-length", l);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Output.Write(jsonr);
谢谢你的帮助:)
编辑:
好的,我做了一些测试,我调试了我的网络服务,然后我找到了下一个细节
在
之后
string jsonr = jSon.Serialize(reg).ToString();
此命令 jsonr 获取下一个字符串,也包含希伯来语和英语字段
jsonr
"{\"Response\":\"OK\",\"FName\":\"igor\",\"LName\":\"kurylo\",\"User_Name\":\"0524858281\",\"ErrorMsg\":\"Pass\"}"
"{\"Response\":\"OK\",\"FName\":\"איגור\",\"LName\":\"קורילו\",\"User_Name\":\"0524858270\",\"ErrorMsg\":\"Pass\"}"
可能是因为 \ 字符串被截断了,我检查了两个字符串的长度,第一个字符串是 92 个字符,第二个是 92
我没能对此进行测试,但我认为问题在于 HttpContext.Current.Response.AddHeader("content-length", l);
行中字符串的长度
您的希伯来语字符串的长度为 5,缺少的字符数为 5。要对希伯来语进行编码,它将使用 double-byte 编码,因此缺少 5 个字符。如果您添加 l
希伯来字符的数量,我相信问题就会消失。要测试它,只需使用 l + 5
.
我在 c# 中使用 HTTP 编写 Web 服务 RESPONE.WRITE json 回答,但问题是当我 return json 的某些字段包含希伯来语时,之后 json 响应未满,结束括号未命中..我把代码放在 C# 和 json 字符串
的响应中json 带有希伯来语字段的响应
{"Response":"OK","FName":"איגור","LName":"kurylo","User_Name":"0524858214","ErrorMsg":"P
json 英文字段响应规则:
{"Response":"OK","FName":"igor","LName":"kurylo","User_Name":"0524858218","ErrorMsg":"Pass"}
并在网络服务中获取我的代码 这是 json 响应的模型
public class Android_Reg
{
public string Response { get; set; }
public string FName { get; set; }
public string LName { get; set; }
public string User_Name { get; set; }
public string ErrorMsg { get; set; }
}
string l = Convert.ToString(jSon.Serialize(reg).ToString().Length);
string jsonr = jSon.Serialize(reg).ToString();
var json = JsonConvert.SerializeObject(reg, Formatting.Indented);
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.Charset = "utf-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.ContentType = "application/json";
HttpContext.Current.Response.AddHeader("content-length", l);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Output.Write(jsonr);
谢谢你的帮助:)
编辑: 好的,我做了一些测试,我调试了我的网络服务,然后我找到了下一个细节 在
之后 string jsonr = jSon.Serialize(reg).ToString();
此命令 jsonr 获取下一个字符串,也包含希伯来语和英语字段 jsonr
"{\"Response\":\"OK\",\"FName\":\"igor\",\"LName\":\"kurylo\",\"User_Name\":\"0524858281\",\"ErrorMsg\":\"Pass\"}"
"{\"Response\":\"OK\",\"FName\":\"איגור\",\"LName\":\"קורילו\",\"User_Name\":\"0524858270\",\"ErrorMsg\":\"Pass\"}"
可能是因为 \ 字符串被截断了,我检查了两个字符串的长度,第一个字符串是 92 个字符,第二个是 92
我没能对此进行测试,但我认为问题在于 HttpContext.Current.Response.AddHeader("content-length", l);
您的希伯来语字符串的长度为 5,缺少的字符数为 5。要对希伯来语进行编码,它将使用 double-byte 编码,因此缺少 5 个字符。如果您添加 l
希伯来字符的数量,我相信问题就会消失。要测试它,只需使用 l + 5
.