gpt4 book ai didi

c# - 为什么 Web API Action 方法在转换它的父类后仍返回子属性的 Json

转载 作者:行者123 更新时间:2023-11-30 20:39:41 24 4
gpt4 key购买 nike

我有这样的 web api Controller :

public class ParentController : ApiController
{
[HttpGet]
public IHttpActionResult GetParent()
{
//instatiating child class
var child = new Child
{
ChildProp1 = "childValue1",
ChildProp2 = "childValue2",
ParentProp1 = "parentValue1",
ParentProp2 = "parentValue2"
};

//up casting is implicit
Parent parent = child;

//returning parent as Json http request
return Ok(parent);
}

private class Child : Parent
{
public string ChildProp1 { get; set; }
public string ChildProp2 { get; set; }
}

private class Parent
{
public string ParentProp1 { get; set; }
public string ParentProp2 { get; set; }
}
}

它工作完美,除了它返回父属性和子属性的 Json 结果,而我需要的是只有父类的属性

输出响应体:

{
"childProp1": "childValue1",
"childProp2": "childValue2",
"parentProp1": "parentValue1",
"parentProp2": "parentValue2"
}

谢谢!

最佳答案

  1. 你可以返回一个匿名类型

    return Ok(new { ParentProp1 = parent.ParentProp1, ParentProp2 = parent.ParentProp2 });

  2. 您可以将 JsonIgnore 属性添加到 Child 属性(尽管这意味着您将无法在其他代码段中将它们作为 JSON 返回.)

    [JsonIgnore]
    public string ChildProp1 { get; set; }

    [JsonIgnore]
    public string ChildProp2 { get; set; }
  3. 您可以创建一个只有父属性 ParentProp1ParentProp2 的接口(interface) IParent,然后使用自定义契约解析器(如在 this question 中看到)与 JsonSerializerSettings.ContractResolver 告诉它只序列化接口(interface)属性。

    return Json(parent, new JsonSerializerSettings {
    ContractResolver = new InterfaceContractResolver (typeof(IParent))
    });

选项 #3 可能是最好的,因为与选项 #1 不同,您只需在界面中重新定义您的属性,而不是可能在返回匿名的多个 HttpGet 方法中类型。此外,与选项 #2 不同的是,您不会被限制从其他 HttpGet 方法返回您的子属性作为 JSON。

关于c# - 为什么 Web API Action 方法在转换它的父类后仍返回子属性的 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34089866/

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