에서 json 키가 소문자임을 확인합니다.그물
에 JSON을 사용하는 간단한 방법이 있습니까?키가 소문자로 전송되도록 하려면 , NET 를 선택합니다.
지금은 뉴턴소프트의 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"}
이 모든 것을 확실하게 할 수 있는 방법이 있나요?username그리고.apitoken키는 소문자로 제공됩니까?
나는 단순히 그것을 훑어보고 싶지 않다.String.ToLower()물론 가치관이 있기 때문에username그리고.apitoken대소문자가 섞여 있습니다.
이것을 프로그램적으로 실행할 수 있고 수동으로 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를 사용하여CamelCasePropertyNamesContractResolver뉴턴소프트에서요.기본적으로 포함된 Json 라이브러리입니다.
protected void Application_Start() {
JsonConfig.Configure();
}
public static class JsonConfig
{
public static void Configure(){
var formatters = GlobalConfiguration.Configuration.Formatters;
var jsonFormatter = formatters.JsonFormatter;
var settings = jsonFormatter.SerializerSettings;
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
}
인제이슨.NET 9.0.1 이후에는 커스텀을 사용하여 모든 속성 이름을 소문자로 변환할 수 있습니다.이 클래스는 기본 계약 해상도를 추출하여 기본 계약 결심에서 설정할 수 있는 경량 개체 이름을 추출합니다.전략 이름 지정따라서 사용자 정의 계약서를 만들 필요가 있으며 이미 자체 계약 결의안을 작성해야 하며 이미 자체 계약 결의안을 가진 프레임 워크로 통합할 수 있습니다.
정의LowercaseNamingStrategy다음과 같습니다.
public class LowercaseNamingStrategy : NamingStrategy
{
protected override string ResolvePropertyName(string name)
{
return name.ToLowerInvariant();
}
}
다음에, 다음과 같이 일련화합니다.
var settings = new JsonSerializerSettings
{
ContractResolver = new DefaultContractResolver { NamingStrategy = new LowercaseNamingStrategy() },
};
string loginRequest = JsonConvert.SerializeObject(auth, settings);
비고 -
를 사용하면 모든 로케일에서 동일한 계약이 생성됩니다.
재정의된 속성 이름, 사전 키 및 확장 데이터 이름의 소문자 여부를 제어하려면 , 또는 (Json)을 설정할 수 있습니다.NET 10.0.1 이후) ~
true.최상의 성능을 위해 계약 해결 프로그램을 캐시할 수 있습니다.
할 수 없는 는, 「」를 할 수 .
NamingStrategy다음과 같이 오브젝트에 직접 접속합니다.[JsonObject(NamingStrategyType = typeof(LowercaseNamingStrategy))] public class Authority { public string Username { get; set; } public string ApiToken { get; set; } }「」는 .
NamingStrategy이 계약 해결사는 모든 인스턴스에서 유형 정보를 글로벌하게 공유하기 때문에 하나의 인스턴스를 변경하면 예기치 않은 부작용이 발생할 수 있습니다.
"JsonProperty"를 사용할 수 있습니다.
사용방법:
public class Authority
{
[JsonProperty("userName")] // or [JsonProperty("username")]
public string Username { get; set; }
[JsonProperty("apiToken")] // or [JsonProperty("apitoken")]
public string ApiToken { get; set; }
}
var json = JsonConvert.SerializeObject(authority);
저는 다른 대답들을 조합해서 썼고, 결국 이렇게 됐습니다.
return JsonConvert.SerializeObject(obj, Formatting.Indented, new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
});
내가 찾던 것에 대한 해결책에 가까웠다. 왜냐하면 나는 내 자신의 것을 만들려는 것이 아니었기 때문이다.
언급URL : https://stackoverflow.com/questions/6288660/ensuring-json-keys-are-lowercase-in-net
'programing' 카테고리의 다른 글
| index.css 와"create-react-app"에 의해 작성된 기본 앱의 App.css는 어떤 차이가 있습니까? (0) | 2023.02.28 |
|---|---|
| google이 create-display-app을 사용하는 리액트 앱에 정의되어 있지 않습니다. (0) | 2023.02.28 |
| application/json과 application/x-www-form-urlencoded의 차이점은 무엇입니까? (0) | 2023.02.28 |
| Spring Boot / h2-console 403과 Spring Security 1.5.2 (0) | 2023.02.28 |
| Wordpress에서 커스텀 포스트 유형의 기본 관리 정렬 순서를 커스텀 열로 설정하려면 어떻게 해야 합니까? (0) | 2023.02.28 |