HttpResponseMessage 内容时出现无效占位符错误
Invalid Placeholder error while HttpResponseMessage content
我正在编写单元测试并且必须 return 响应对象。我能够 return 下面的回复
var res = new HttpResponseMessage()
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent(string.Format("{{ 'email':'{0}', 'first_name':'{1}', 'last_name':'{2}', 'id':'{3}' }}", data.Email, data.FirstName, data.LastName, data.Id))
};
但现在需要将所有响应包装在 'data' 属性 中。对于如下更新的代码
var res = new HttpResponseMessage()
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent(string.Format("{{'data':{'email':'{0}','first_name':'{1}','last_name':'{2}','id':'{3}'}}}", data.Email, data.FirstName, data.LastName, data.Id))
};
但低于错误
留言:
System.FormatException:输入字符串的格式不正确。
堆栈跟踪:
StringBuilder.FormatError()
StringBuilder.AppendFormatHelper(IFormatProvider 提供者、字符串格式、ParamsArray 参数)
String.FormatHelper(IFormatProvider 提供程序、字符串格式、ParamsArray 参数)
String.Format(字符串格式,对象[]参数)
不确定这里出了什么问题。请帮忙。
您可以使用Newtonsoft.Json
using System;
using Newtonsoft.Json;
using System.Text;
using System.IO;
public class Program
{
public static void Main()
{
var data = new
{
email = "data@ada.com",
first_name = "abc",
last_name = "abc",
id = 1
};
var data1 = new {data};
var s = new JsonSerializer();
var sb = new StringBuilder();
using (var w = new StringWriter(sb))
{
s.Serialize(w, data1);
}
Console.WriteLine(sb.ToString());
}
}
我没有太多时间看,但你可以试试这个吗?
var res = new HttpResponseMessage()
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent(string.Format("{{'data':{'email':'{0}','first_name':'{1}','last_name':'{2}','id':'{3}'}}}", data.data.Email, data.data.FirstName, data.data.LastName, data.data.Id))
};
尝试了很多选项并以以下结尾。
string.Format("{{ 'data': {{ 'email':'{0}', 'first_name':'{1}', 'last_name':'{2}', 'id':'{3}' }} }}", data.Email, data.FirstName, data.LastName, data.Id);
如果要避免序列化,可以使用 c# 7.0 功能 $ 字符串插值。
使用:
var res = new HttpResponseMessage()
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent($"{{ 'data': {{ 'email':'{data.Email}', 'first_name':'{data.FirstName}', 'last_name':'{data.LastName}', 'id':'{data.Id}' }} }}")
};
我正在编写单元测试并且必须 return 响应对象。我能够 return 下面的回复
var res = new HttpResponseMessage()
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent(string.Format("{{ 'email':'{0}', 'first_name':'{1}', 'last_name':'{2}', 'id':'{3}' }}", data.Email, data.FirstName, data.LastName, data.Id))
};
但现在需要将所有响应包装在 'data' 属性 中。对于如下更新的代码
var res = new HttpResponseMessage()
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent(string.Format("{{'data':{'email':'{0}','first_name':'{1}','last_name':'{2}','id':'{3}'}}}", data.Email, data.FirstName, data.LastName, data.Id))
};
但低于错误
留言: System.FormatException:输入字符串的格式不正确。 堆栈跟踪: StringBuilder.FormatError() StringBuilder.AppendFormatHelper(IFormatProvider 提供者、字符串格式、ParamsArray 参数) String.FormatHelper(IFormatProvider 提供程序、字符串格式、ParamsArray 参数) String.Format(字符串格式,对象[]参数)
不确定这里出了什么问题。请帮忙。
您可以使用Newtonsoft.Json
using System;
using Newtonsoft.Json;
using System.Text;
using System.IO;
public class Program
{
public static void Main()
{
var data = new
{
email = "data@ada.com",
first_name = "abc",
last_name = "abc",
id = 1
};
var data1 = new {data};
var s = new JsonSerializer();
var sb = new StringBuilder();
using (var w = new StringWriter(sb))
{
s.Serialize(w, data1);
}
Console.WriteLine(sb.ToString());
}
}
我没有太多时间看,但你可以试试这个吗?
var res = new HttpResponseMessage()
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent(string.Format("{{'data':{'email':'{0}','first_name':'{1}','last_name':'{2}','id':'{3}'}}}", data.data.Email, data.data.FirstName, data.data.LastName, data.data.Id))
};
尝试了很多选项并以以下结尾。
string.Format("{{ 'data': {{ 'email':'{0}', 'first_name':'{1}', 'last_name':'{2}', 'id':'{3}' }} }}", data.Email, data.FirstName, data.LastName, data.Id);
如果要避免序列化,可以使用 c# 7.0 功能 $ 字符串插值。 使用:
var res = new HttpResponseMessage()
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent($"{{ 'data': {{ 'email':'{data.Email}', 'first_name':'{data.FirstName}', 'last_name':'{data.LastName}', 'id':'{data.Id}' }} }}")
};