Asp.net mvc 4 从控制台创建WebAPI post以在json数据中包含$type

Asp.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

我正在创建对象并将它们发布到webapi。基本上,我就是无法将该死的东西序列化,以便在json中包含$type信息。下面是我试图编写的代码。之后就是我所期望的json

       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);
}