当前位置: 首页 > 编程语言 > C#

如何在我的JSON模型类中使用保留关键字作为标识符?Share

时间:2023-04-10 23:29:54 C#

我如何在我的JSON模型类中使用保留关键字作为标识符?我以前从未使用过WebAPI,但我需要一个接受/返回JSON对象的Web服务,使用它似乎是一件合理的事情。这看起来很简单(如果不是为了我的目的而矫枉过正),但我需要处理的数据结构如下所示:{"values":["foo","bar"],"default":"bar"}所以我去制作一个模型对象:classDropDownValues{publicstring[]values{get;放;}publicstringdefault{get;放;}}问题是default似乎是一个受保护的关键字。一定有办法解决这个问题,对吧?我建议采用不同的方法。尽可能保持C#对象模型的标准(我不会使用@sign和C#关键字作为属性名称)。我们可以使用Json.NET功能将序列化(JSON)世界和C#对象分开。最简单的一种是使用属性修饰:[JsonProperty(PropertyName="default")]publicstringDefaultValue{get;放;在这种情况下,我们必须在项目中引用Newtonsoft.Json。如果它必须是POCO,我们可以从DefaultContractResolver中引入CustomResolver并在那里定义那些转换......但我会说在这种情况下,关注点分离是一个更纯粹的解决方案编辑:DraftJSONContractResolver(见评论)重要注意:Newtonsoft.Json是WebAPI的一部分。它不仅是一个开源的,甚至MS团队也认为它是一个核心的JSON序列化器。1)Newtonsoft.Json(作为Web.API的一部分)已安装在您的解决方案中。所以你不必单独下载它(nuget)。它总是在你的包文件夹中。所以使用这个属性只是添加了一个引用。它在那里...2)有一个小草案如何在保留POCO的同时做属性的事情。正如我在这里尝试解释的:POCO,行为和持久性Igorance,为了保持POCO(例如,我们受益于数据层上的NHibernate分层架构),我们可以用ContractResolver替换属性。我们的POCO库不需要引用任何我们只需要扩展服务层的东西:publicclassMyResolver:DefaultContractResolver{varpropertyInfo=masPropertyInfo;如果(propertyInfo==null){返回jProperty;}//如果Propertyname是DefaultValue则进行调整varisDefaultValueProeprty=propertyInfo.Name.Equals("DefaultValue");如果(isDefaultValueProeprty){jProperty.PropertyName=“默认”;}返回jProperty;}...这样我们就可以向序列化程序提供与[JsonPropertyAttribute]相同的信息。现在,我们只需要使用它。有很多方法(例如全局),但我们只能对控制器执行此操作:varjSettings=context.Configuration.Formatters.JsonFormatter.SerializerSettings;j设置。ContractResolver=MyResolver;您可以在C#中使用关键字作为标识符,方法是在关键字前加上@。DropDownValues类使用骆驼约定:classDropDownValues{publicstring[]values{get;放;}publicstringdefault{get;更好的解决方案是使用CamelCasePropertyNamesContractResolver,它既避免保留关键字又仍然使用C#编码约定:classDropDownValues{publicstring[]Values{get;放;}公共字符串默认{得到;放;}}和自定义JsonFormatter以避免C#和json对象的contractmismatch如下:以上是C#学习教程:HowtousereservedkeywordsasidentifiersinmyJSONmodelclasses?所有分享的内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——varjsonFormatter=configuration.Formatters.JsonFormatter;jsonFormatter.SerializerSettings=newJsonSerializerSettings(){ContractResolver=newCamelCasePropertyNamesContractResolver()};本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: