我正在编写单元测试,并且必须返回响应对象。我能够返回以下响应
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 args) String.FormatHelper(IFormatProvider提供程序,字符串格式,ParamsArray args) String.Format(字符串格式,Object []参数)
不确定这是怎么回事。请帮忙。
答案 0 :(得分:0)
您可以使用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());
}
}
答案 1 :(得分:0)
我没有太多时间看,但是你可以试试看吗?
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))
};
答案 2 :(得分:0)
尝试了很多选择,并在下面结束。
string.Format("{{ 'data': {{ 'email':'{0}', 'first_name':'{1}', 'last_name':'{2}', 'id':'{3}' }} }}", data.Email, data.FirstName, data.LastName, data.Id);
答案 3 :(得分:0)
如果避免序列化,则可以使用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}' }} }}")
};