PostAsJsonAsync 深度序列化
PostAsJsonAsync Deep Serialization
我正在使用 PostAsJsonAsync 将参数传递给 Web api 服务,就像这样
public T Save<T>(string url, T item) where T : class
{
using (var client = new HttpClient())
{
client.BaseAddress = _dbServiceUriProvider.GetUri();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.PostAsJsonAsync(url, item).Result;
if (!response.IsSuccessStatusCode)
{
throw new DbServiceException("Error in DbServiceDataSaver:\r\n" + response.ReasonPhrase);
}
T returnVar = response.Content.ReadAsAsync<T>().Result;
return returnVar;
}
}
问题是这只是序列化我传递的对象而不是任何子对象。例如,如果我有一个具有 HashSet 成员的 class Foo,则 Bars 不会被序列化。这是因为 HashSet 无法序列化还是这里发生了什么?
事实证明,我的 类 上只有部分属性具有 [DataMember] 属性,因此只有那些属性被序列化了
在 class 级别上使用 Serializable 属性,在属性级别上使用数据成员,它将为您工作或使用 json.serializeObjectmethod。
要查看 json 数据,不需要 fiddler 只需安装一个名为 json viewer 的插件,它将在浏览器本身上以 json 格式显示您的数据。
[https://addons.mozilla.org/en-Us/firefox/addon/jsonview/][1]
我正在使用 PostAsJsonAsync 将参数传递给 Web api 服务,就像这样
public T Save<T>(string url, T item) where T : class
{
using (var client = new HttpClient())
{
client.BaseAddress = _dbServiceUriProvider.GetUri();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.PostAsJsonAsync(url, item).Result;
if (!response.IsSuccessStatusCode)
{
throw new DbServiceException("Error in DbServiceDataSaver:\r\n" + response.ReasonPhrase);
}
T returnVar = response.Content.ReadAsAsync<T>().Result;
return returnVar;
}
}
问题是这只是序列化我传递的对象而不是任何子对象。例如,如果我有一个具有 HashSet
事实证明,我的 类 上只有部分属性具有 [DataMember] 属性,因此只有那些属性被序列化了
在 class 级别上使用 Serializable 属性,在属性级别上使用数据成员,它将为您工作或使用 json.serializeObjectmethod。 要查看 json 数据,不需要 fiddler 只需安装一个名为 json viewer 的插件,它将在浏览器本身上以 json 格式显示您的数据。 [https://addons.mozilla.org/en-Us/firefox/addon/jsonview/][1]