是否有一种平衡的方法可以使用单个类序列化c#中的2级对象?
我需要以这种方式从控制器输出json结果:是否有一种平衡的方法可以使用单个类序列化c#中的2级对象?,c#,.net,asp.net-core,C#,.net,Asp.net Core,我需要以这种方式从控制器输出json结果:{x:{myProp1:false,myProp2:“xx”} 我希望传递给Json(obj)的对象是没有嵌套类的类的实例。 是否有任何方法可以创建一个类MyResult,该类将生成我想要的结果,而不创建包装器独立类或对象 我要所有的: 为了能够生成正确的响应,调用返回Json(new MyResult()) 将MyResult类保留为单个文件中的单个类 没有过度的工程设计 寻找做这件事的最佳方式 当前代码: [Serializable] class
{x:{myProp1:false,myProp2:“xx”}
我希望传递给Json(obj)
的对象是没有嵌套类的类的实例。
是否有任何方法可以创建一个类MyResult
,该类将生成我想要的结果,而不创建包装器独立类或对象
我要所有的:
- 为了能够生成正确的响应,调用
返回Json(new MyResult())代码>
- 将
类保留为单个文件中的单个类MyResult
- 没有过度的工程设计
[Serializable]
class MyResult{
[JsonPropertyName("myProp1")]
public bool Property1 {get; init;} = false;
[JsonPropertyName("myProp2")]
public string Property2 {get; init;} = "xx";
public MyResult(bool p1 = true, string p2 = "xx") {
Property1 = p1;
Property2 = p2;
}
}
...
public class MyController : Controller
[AllowAnonymous]
[HttpGet("GetMyResult")]
[Produces("application/json")]
public IActionResult GetMyResult() {
return Json(new {x = new MyResult()}); // I want this to be return Json(new MyResult());
}
- ✅ 能够生成调用return Json(new MyResult())的正确响应李>
- ✅ 将MyResult类保留为单个文件中的单个类
- ✅ 没有过度的工程设计
- ✅ 能够生成调用return Json(new MyResult())的正确响应李>
- ✅ 将MyResult类保留为单个文件中的单个类
- ✅ 没有过度的工程设计
返回Json(new MyResult())
。另一方面,您想要的JSON非常不同。问题不在于匿名类型。它试图使用MyResult
来表示一个非常不同的对象尽管您不喜欢它,但您对Json(新x{…})
的实际问题是什么?@filimonic这不是一个包装器。那是另一个物体。您要求的是转换,而不是序列化。最简单的方法是创建一个与您想要的负载实际匹配的DTO。当您试图从与有效负载不匹配的MyResult
创建一个招摇过市的文档时会发生什么?之后,匿名类型是快速和肮脏的方式。如果您确实想强制序列化程序以某种方式工作,则需要一个自定义类型转换器。那是过度工程化了though@filimonic我想要一些类似于内部的easy nested struct的东西,
创建一个适当的数据,然后类ResultDTO{public MyResult x{get;set;}代码>“这样做的最佳方式”-将是一件相当固执己见的事情。我想说的是,您当前的版本相当不错。没有什么可以阻止您使用返回Json(new MyResult())
。另一方面,您想要的JSON非常不同。问题不在于匿名类型。它试图使用MyResult
来表示一个非常不同的对象尽管您不喜欢它,但您对Json(新x{…})
的实际问题是什么?@filimonic这不是一个包装器。那是另一个物体。您要求的是转换,而不是序列化。最简单的方法是创建一个与您想要的负载实际匹配的DTO。当您试图从与有效负载不匹配的MyResult
创建一个招摇过市的文档时会发生什么?之后,匿名类型是快速和肮脏的方式。如果您确实想强制序列化程序以某种方式工作,则需要一个自定义类型转换器。那是过度工程化了though@filimonic我想要一些类似于内部的easy nested struct的东西,
创建一个适当的数据,然后类ResultDTO{public MyResult x{get;set;}代码>
[AllowAnonymous]
[HttpGet]
[Produces("application/json")]
public IActionResult GetMyResult()
{
return Json(new MyResult());
}
public override JsonResult Json(object data)
=> new JsonResult( new { x = data });