Asp.net mvc 4 从控制台创建WebAPI post以在json数据中包含$type
我正在创建对象并将它们发布到webapi。基本上,我就是无法将该死的东西序列化,以便在json中包含$type信息。下面是我试图编写的代码。之后就是我所期望的jsonAsp.net mvc 4 从控制台创建WebAPI post以在json数据中包含$type,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc 4,Asp.net Web Api,我正在创建对象并将它们发布到webapi。基本上,我就是无法将该死的东西序列化,以便在json中包含$type信息。下面是我试图编写的代码。之后就是我所期望的json var cds = new List<CreditDefaultSwaps>() { new CreditDefaultSwaps() { ModelNumber = "SP8A1ETA", BrokerSpread = 0}, new Cr
var cds = new List<CreditDefaultSwaps>()
{
new CreditDefaultSwaps() { ModelNumber = "SP8A1ETA", BrokerSpread = 0},
new CreditDefaultSwaps() { ModelNumber = "SP3A0TU1", BrokerSpread = 0},
new CreditDefaultSwaps() { ModelNumber = "SP4A102V", BrokerSpread = 0}
};
var client = new HttpClient {BaseAddress = new Uri("http://localhost/BloombergWebAPI/api/")};
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// set up request object
var oContract = new WebApiDataServiceRequest
{
RequestType = ReferenceDataRequestServiceTypes.ReferenceDataRequest,
SwapType = BloombergWebAPIMarshal.SwapType.CDS,
SecurityList = cds
};
Tried something like this and the var content was formatted as I would expect
however I couldn't post the data using postasjsonasync
//var content = JsonConvert.SerializeObject(oContract, Formatting.Indented,
// new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects });
Console.ReadLine();
var response = client.PostAsJsonAsync("bloombergapi/processbloombergrequest", oContract).Result;
创建了另一个重载,使用此调用生成正确的请求:
var response = client.PostAsJsonAsync("processbloombergrequest", oContract, TypeNameHandling.Objects).Result
这是新的过载
public static Task<HttpResponseMessage> PostAsJsonAsync<T>(this HttpClient client, string requestUri, T value, TypeNameHandling typeNameHandling)
{
return client.PostAsJsonAsync<T>(requestUri, value, CancellationToken.None, typeNameHandling);
}
public static Task<HttpResponseMessage> PostAsJsonAsync<T>(this HttpClient client, string requestUri, T value, CancellationToken cancellationToken, TypeNameHandling typeNameHandling)
{
var formatter = new JsonMediaTypeFormatter
{
SerializerSettings = new JsonSerializerSettings()
{
TypeNameHandling = typeNameHandling
}
};
return client.PostAsync<T>(requestUri, value, formatter, cancellationToken);
}
公共静态任务PostAsJsonAsync(此HttpClient客户端,字符串请求URI,T值,TypeNameHandling TypeNameHandling)
{
返回client.PostAsJsonAsync(requestUri,value,CancellationToken.None,typenameholling);
}
公共静态任务PostAsJsonAsync(此HttpClient客户端,字符串请求URI,T值,CancellationToken CancellationToken,TypeNameHandling TypeNameHandling)
{
var formatter=新的JsonMediaTypeFormatter
{
SerializerSettings=新JsonSerializerSettings()
{
TypeNameHandling=TypeNameHandling
}
};
返回client.PostAsync(requestUri、值、格式化程序、cancellationToken);
}
public static Task<HttpResponseMessage> PostAsJsonAsync<T>(this HttpClient client, string requestUri, T value, TypeNameHandling typeNameHandling)
{
return client.PostAsJsonAsync<T>(requestUri, value, CancellationToken.None, typeNameHandling);
}
public static Task<HttpResponseMessage> PostAsJsonAsync<T>(this HttpClient client, string requestUri, T value, CancellationToken cancellationToken, TypeNameHandling typeNameHandling)
{
var formatter = new JsonMediaTypeFormatter
{
SerializerSettings = new JsonSerializerSettings()
{
TypeNameHandling = typeNameHandling
}
};
return client.PostAsync<T>(requestUri, value, formatter, cancellationToken);
}