当前位置: 首页 > 面试题库 >

确保JSON键在.NET中为小写

仲孙雅达
2023-03-14
问题内容

是否有简单的方法在.NET中使用JSON来确保密钥以小写形式发送?

目前,我正在使用newtonsoft的Json.NET库,并且仅使用

string loginRequest = JsonConvert.SerializeObject(auth);

在这种情况下auth只是以下对象

public class Authority
{
    public string Username { get; set; }
    public string ApiToken { get; set; }
}

这导致

{"Username":"Mark","ApiToken":"xyzABC1234"}

有没有办法确保usernameapitoken键都以小写形式通过?

我不想简单地通过运行它String.ToLower(),当然,因为价值观usernameapitoken是混合的情况。

我意识到我可以以编程方式执行此操作并手动创建JSON字符串,但是我需要大约20个左右的JSON数据字符串,并且正在查看是否可以节省一些时间。我想知道是否有任何已经建立的库可以让您强制小写密钥创建。


问题答案:

您可以为此创建一个自定义合同解析器。以下合同解析器会将所有密钥转换为小写:

public class LowercaseContractResolver : DefaultContractResolver
{
    protected override string ResolvePropertyName(string propertyName)
    {
        return propertyName.ToLower();
    }
}

用法:

var settings = new JsonSerializerSettings();
settings.ContractResolver = new LowercaseContractResolver();
var json = JsonConvert.SerializeObject(authority, Formatting.Indented, settings);

威尔导致:

{"username":"Mark","apitoken":"xyzABC1234"}

如果您始终想使用进行序列化LowercaseContractResolver,请考虑将其包装在一个类中,以避免重复自己的操作:

public class LowercaseJsonSerializer
{
    private static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
    {
        ContractResolver = new LowercaseContractResolver()
    };

    public static string SerializeObject(object o)
    {
        return JsonConvert.SerializeObject(o, Formatting.Indented, Settings);
    }

    public class LowercaseContractResolver : DefaultContractResolver
    {
        protected override string ResolvePropertyName(string propertyName)
        {
            return propertyName.ToLower();
        }
    }
}

可以这样使用:

var json = LowercaseJsonSerializer.SerializeObject(new { Foo = "bar" });
// { "foo": "bar" }

ASP.NET MVC4 / WebAPI

如果您使用的是ASP.NET MVC4 /
WebAPI,则可以使用CamelCasePropertyNamesContractResolverNewtonsoft.Json库中的默认库。



 类似资料:
  • 问题内容: 我正在使用http://www.json.org/java/index.html此处提供的JSON库将必须转换的JSON字符串转换为CSV。但是我有一个问题是,转换后键的顺序丢失了。 这是转换代码: 结果如下: 虽然我期望保持键的顺序: 有什么办法可以使用此库获得此结果吗?如果不是,是否有其他库可以提供保持键顺序在结果中的功能? 问题答案: 解决了。 我使用了https://code.

  • 我有一个巨大的JSON文件作为RESTAPI调用的有效负载发布,用于测试目的。我试过这样的方法: 并将错误获取为: 我可以通过读取文件和传递身体作为字符串运行,但我看到我可以直接传递文件对象,这不起作用。 经过充分的研究,它似乎不起作用。我已经放心地提出了这个问题。https://github.com/jayway/rest-assured/issues/674

  • 问题内容: 我有一个.NET中的SOAP Web服务返回的JSON字符串。如下: 现在,我想将此字符串解析为JSON对象。我也看了这个,他们已经用这行代码: 所以我可以通过用我的字符串名称替换“ json”来做到这一点。还需要引用除NewtonSoft.dll以外的任何其他dll吗? 顺便说一句,这是完整的网络服务代码 问题答案: 用 您需要System.Web.Extensions dll并导入

  • 问题内容: 我有一个缩进的JSON字符串,例如 但是,我没有要序列化或反序列化的实例的类型。 在我的情况下, 最小化* JSON字符串的 最有效方法 是什么?例如 * 我不介意使用可用于生产的库。 问题答案: 应该做。它确保保留包含空格字符的字符串,并丢弃所有其他空格字符。所有的JSON的关键字(,,)必须由逗号或其他标点符号所以只有字符串内需要空格分开予以保留。 第一个选项匹配双引号字符串。表示

  • 问题内容: 我的网站服务正在将DateTime返回到jQuery调用。服务以以下格式返回数据: 如何将其转换为JavaScript友好的日期? 问题答案: 返回的时间是自纪元以来的毫秒数。您可以这样做: 有关如何精确设置日期格式的信息,请参见http://www.w3schools.com/jsref/jsref_obj_date.asp上的完整参考。 您可以通过解析整数来去除非数字: 或应用以下

  • 问题内容: 我想将创建的JSON文件转换为SQLite数据库。 我的意图是稍后决定最好的数据容器和入口点是json(通过文本编辑器输入数据)或SQLite(通过类似电子表格的GUI(例如SQLiteStudio)输入数据)。 我的json文件是这样的(包含我城市中某些十字路口的交通数据): 并且我用以下几行Python代码创建了具有一对多关系的漂亮数据库: 但是问题是,当我准备使用诸如的实际数据插