ServiceStack.Text JsonConfig 作用域忽略属性
ServiceStack.Text JsonConfig Scoping Ignoring Attributes
我希望通过 .net 核心 API 项目上的属性有效地创建逻辑,根据属性将序列化或反序列化,同时忽略某些属性。
例如
如果 属性 用 [OutputOnly] 修饰,则不允许用户通过 API 传递它,但是 API 可以 return 这个值。
相反 [InputOnly] 将允许用户只传递这个值,但是 API 不会 return 这个。
我遇到的问题是 JsConfig static 而启用忽略字段的 属性 (IgnoreAttributesNamed) 是单例也不是 JsConfig.With()
范围功能的一部分
我目前的想法是在 .net 核心中有一个 InputFormatter 和一个 OutputFormatter,它们将处理 this 逻辑,但需要能够配置在这些上下文中忽略哪些属性
如有任何建议,我们将不胜感激:)
我真的不明白这里的目标是什么,您可以使用 Request DTO 来定义服务接受哪些参数,并使用 Response DTO 来定义您的服务 returns,Request/Response DTO 用于定义您的服务合同,即最多 important contract in your System, whose well-defined interface is used to encapsulate your systems capabilities 并且是您 API 的所有消费者绑定的内容。
用于定义 Request/Response DTO 类 的 C# POCO 应被视为用于定义 API 的 inputs/outputs 的 DSL,试图 collapse and merge their explicit intent of your APIs into multi competing Types with custom attributes is self-defeating, it adds unnecessary confusion, blurs its explicit definition which invalidates the primary purpose of having service contracts which is what all metadata services look at for documenting your API and generating the typed bindings in different supported languages.
因此,非常不鼓励使用自定义属性来控制序列化行为的方法和预期目标,以便您可以在不同的合同中重用相同的类型,但是如果您希望继续使用这种方法,可以参考此答案 different ways to Ignore properties 在 ServiceStack.Text 中,特别是 ShouldSerailize()
API 这将允许您动态指定哪些字段 ServiceStack.Text 应该序列化,如果您打算实现一个约定,您可以委托自定义扩展方法的实现,例如:
class MyRequest
{
public bool? ShouldSerialize(string fieldName) =>
MyUtils.ShouldSerialize(GetType(),fieldName);
}
除了链接的答案之外,操纵序列化的唯一其他机会可能是使用 built-in AutoMapping utils for selecting which properties should be copied over and the Object Dictionary APIs 将 C# 类型转换为对象字典并以这种方式操纵它,然后可以将其脱水回 C# 类型应用您的约定后。
我希望通过 .net 核心 API 项目上的属性有效地创建逻辑,根据属性将序列化或反序列化,同时忽略某些属性。
例如
如果 属性 用 [OutputOnly] 修饰,则不允许用户通过 API 传递它,但是 API 可以 return 这个值。
相反 [InputOnly] 将允许用户只传递这个值,但是 API 不会 return 这个。
我遇到的问题是 JsConfig static 而启用忽略字段的 属性 (IgnoreAttributesNamed) 是单例也不是 JsConfig.With()
范围功能的一部分我目前的想法是在 .net 核心中有一个 InputFormatter 和一个 OutputFormatter,它们将处理 this 逻辑,但需要能够配置在这些上下文中忽略哪些属性
如有任何建议,我们将不胜感激:)
我真的不明白这里的目标是什么,您可以使用 Request DTO 来定义服务接受哪些参数,并使用 Response DTO 来定义您的服务 returns,Request/Response DTO 用于定义您的服务合同,即最多 important contract in your System, whose well-defined interface is used to encapsulate your systems capabilities 并且是您 API 的所有消费者绑定的内容。
用于定义 Request/Response DTO 类 的 C# POCO 应被视为用于定义 API 的 inputs/outputs 的 DSL,试图 collapse and merge their explicit intent of your APIs into multi competing Types with custom attributes is self-defeating, it adds unnecessary confusion, blurs its explicit definition which invalidates the primary purpose of having service contracts which is what all metadata services look at for documenting your API and generating the typed bindings in different supported languages.
因此,非常不鼓励使用自定义属性来控制序列化行为的方法和预期目标,以便您可以在不同的合同中重用相同的类型,但是如果您希望继续使用这种方法,可以参考此答案 different ways to Ignore properties 在 ServiceStack.Text 中,特别是 ShouldSerailize()
API 这将允许您动态指定哪些字段 ServiceStack.Text 应该序列化,如果您打算实现一个约定,您可以委托自定义扩展方法的实现,例如:
class MyRequest
{
public bool? ShouldSerialize(string fieldName) =>
MyUtils.ShouldSerialize(GetType(),fieldName);
}
除了链接的答案之外,操纵序列化的唯一其他机会可能是使用 built-in AutoMapping utils for selecting which properties should be copied over and the Object Dictionary APIs 将 C# 类型转换为对象字典并以这种方式操纵它,然后可以将其脱水回 C# 类型应用您的约定后。