我正在尝试从我的mvc项目到web api的put操作。我有两个参数,一个是整数类型,另一个是复杂类型 对服务器的调用 当复杂类型为null时,简单类型将到达服务器。邮递员工作得很好......我需要知道我做错了什么
这是我的模特
public void Serialize(object oToSerialize)
{
XmlSerializer xmlSerializer = new XmlSerializer(oToSerialize.GetType());
XmlDocument xDoc = new XmlDocument();
using (var stream = new MemoryStream())
{
xmlSerializer.Serialize(stream, oToSerialize);
stream.Flush();
stream.Seek(0, SeekOrigin.Begin);
xDoc.Load(stream);
}
}
这是我的客户端代码
//Same with client side
public class PaymentTypeVM
{
public int Id { get; set; }
public string Name { get; set; }
}
这是服务器代码
public static async Task<RequestResult> EditPaymentType<T>(int id, T model)
{
var content = new { Model = model };
var str = JsonConvert.SerializeObject(content);
var resp = await _client.PutAsync($"api/admin/editpaymenttype/{id}", new StringContent(str, Encoding.UTF8, "application/json"));
var txt = await resp.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<RequestResult>(txt);
}
我需要一个简单的答案,因为我是新手,提前致谢。
答案 0 :(得分:1)
假设您像这样致电from django.conf import settings
class Company(models.Model):
name = models.CharField(max_length=200)
shareholder = models.ManyToManyField(settings.AUTH_USER_MODEL, through='Foo', blank=True)
class Foo(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
company = models.ForeignKey('Company', on_delete=models.CASCADE)
number_of_shares = models.FloatField()
:EditPaymentType
在客户端更改此部分...
EditPaymentType<PaymentTypeVM>
到此......
var content = new { Model = model };
var str = JsonConvert.SerializeObject(content);
您当前正在向它发送一个序列化对象,其属性为var str = JsonConvert.SerializeObject(model);
,其值为您的模型,但在反序列化时尝试将其映射到Model
类型的参数服务器。
如果类型不匹配,则它无法将正文内容反序列化为参数,并且最终为空。
答案 1 :(得分:1)
你应该改变它。
new A { arr = { 10, 20, 30} }
到
new A { arr = new int[3]{ 10, 20, 30} }
不要将var content = new { Model = model };
var str = JsonConvert.SerializeObject(content);
作为嵌套对象发送。
答案 2 :(得分:0)
HttpClient
发送一个具有以下结构的参数:
{
Model =
{
Id = 1,
Name = "Name"
}
}
同时,WebApi
服务器需要这样的参数:
{
Id = 1,
Name = "Name"
}