gpt4 book ai didi

json - 为什么我的 Web API Controller 操作没有反序列化子属性的子属性?

转载 作者:行者123 更新时间:2023-12-04 16:24:23 25 4
gpt4 key购买 nike

我正在向 Web API Controller 操作发送 PUT 请求中的 json 有效负载。有问题的操作具有如下所示的签名:

public IHttpActionResult Post([FromBody]SaveThingRequest request)

SaveThingRequest 看起来像这样:
public class SaveThingRequest
{
public List<ElementInfo> Elements { get; set; }

public class ElementInfo
{
public List<ElementSettingInfo> Settings { get; set; }

public class ElementSettingInfo
{
public string Name { get; set; }
public string Value { get; set; }
}
}
}

我在包含具有设置的元素的请求正文中发布 json。我已经通过在 Controller 操作中手动反序列化并确认 JSON 具有类似于以下内容的结构来确认这一点:
{
Elements: [
{
Settings: [
{
Name: 'Name 1',
Value: 'Value 1'
},
{
Name: 'Name 2',
Value: 'Value 2'
}
]
},
{
Settings: [
{
Name: 'Name 1',
Value: 'Value 1'
},
{
Name: 'Name 2',
Value: 'Value 2'
}
]
}
]
}

但是,当 .NET 反序列化有效负载并创建 SaveThingRequest 时,会填充我的元素,但它们都具有空设置属性。我不知道如何解决这个问题。有没有人对这里可能发生的事情有任何想法?

最佳答案

这个问题应该删除。它像宣传的那样工作。我的问题是我在 JSON 上有一个名为“settings”(小写)的附加属性,反序列化器试图匹配它,因为如果找不到区分大小写的匹配,NewtonSoft 反序列化会尝试不区分大小写的匹配。通过将方法的签名更改为:

public IHttpActionResult Post([FromBody]object request)

然后将其添加到方法实现中:
var result = JsonConvert.DeserializeObject<SaveThingRequest>(request.ToString());

我收到一个反序列化异常说:

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[Noteable.Contracts.ClinicalReports.SaveThingRequest+ElementInfo+ElementSettingInfo]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object. Path 'Elements[0].settings.TextSize', line 11, position 20.



消息的结尾向我展示了当反序列化器失败时正在反序列化的内容,并为我指明了正确的方向。 =[

关于json - 为什么我的 Web API Controller 操作没有反序列化子属性的子属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25313623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com