이 코드는 잘 작동 :JSON (snake_case)에서 동적 (PascalCase)으로 비 직렬화하는 방법은 무엇입니까?
string json = @"{""MyProperty"" : ""bar""}";
var payload = JsonConvert.DeserializeObject<dynamic>(json);
string typedProperty = payload.MyProperty; //contains "bar"
이의이 snake_case의 JSON과 동일한 작업을 수행 해보자. 실제로 recommended way 인 SnakeCaseNamingStrategy
을 추가하여 snake_case를 처리합니다.
_snakeSettings = new JsonSerializerSettings()
{
ContractResolver = new UnderscorePropertyNamesContractResolver()
};
public class UnderscorePropertyNamesContractResolver : DefaultContractResolver
{
public UnderscorePropertyNamesContractResolver()
{
NamingStrategy = new SnakeCaseNamingStrategy();
}
}
는 다음,
DeserializeObject
통화에 설정을 적용합니다.
dynamic
에 대상 유형을 전환,
string snakeJson = @"{""my_property"" : ""bar""}";
var payload = JsonConvert.DeserializeObject<Payload>(snakeJson, _snakeSettings);
string typedProperty = payload.MyProperty; //contains "bar"
OK : 정적 형식으로 직렬화의 경우, 이러한 설정이 성공적으로 JSON을 snake_case에 적용됩니다
var payload = JsonConvert.DeserializeObject<dynamic>(snakeJson, _snakeSettings);
string typedProperty = payload.MyProperty; //is null
string wrongProperty = payload.my_property; //is not null
를 보시다시피, _snakeSettings
이 시간을 무시하는 . 나는 이것이 버그라고 생각한다. JSON (snake_case) -> dynamic (PascalCase)
역 직렬화를 수행 할 수있는 해결 방법이 있습니까?
환경 : 당신이 JsonConvert.DeserializeObject<dynamic>
를 호출 할 때
<TargetFramework>netcoreapp1.1</TargetFramework>
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
감사합니다. 이것은 불분명 한 API의 좋은 예입니다. 나는이 문제를보고 할 것이고, 내가 시작한 이유는 공식적인 repo에서의 활동이 매우 낮다는 것입니다. –