programing

JsonConvert에서 null/empt 값을 처리하는 방법.디시리얼라이즈 오브젝트

codeshow 2023. 3. 8. 21:39
반응형

JsonConvert에서 null/empt 값을 처리하는 방법.디시리얼라이즈 오브젝트

다음 코드가 있습니다.

return (DataTable)JsonConvert.DeserializeObject(_data, (typeof(DataTable)));

그리고 나서, 나는 시도했다:

var jsonSettings = new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore
};

return (DataTable)JsonConvert.DeserializeObject<DataTable>(_data, jsonSettings);

리턴 라인이 다음 오류를 발생시키고 있습니다.

{"System"을 입력하기 위해 값 "\"을(를) 변환하는 중 오류가 발생했습니다.두 배로."}

커스텀 작성을 제안하는 온라인 솔루션이 많다.Classnullable type을 사용하지만 이 방법은 사용할 수 없습니다.json이 특정 형식일 것이라고 기대할 수 없습니다.열 개수, 열 유형 또는 열 이름을 제어할 수 없습니다.

설정을 다음에 제공할 수 있습니다.JsonConvert.DeserializeObject이 경우 null 값 처리 방법 등을 설명합니다.

var settings = new JsonSerializerSettings
                    {
                        NullValueHandling = NullValueHandling.Ignore,
                        MissingMemberHandling = MissingMemberHandling.Ignore
                    };
var jsonModel = JsonConvert.DeserializeObject<Customer>(jsonString, settings);

Thomas Hagström을 위한 대체 솔루션은 멤버 변수에 속성 속성을 사용하는 것입니다.

예를 들어 API를 호출하면 에러 메시지가 반환되거나 반환되지 않을 수 있으므로 ErrorMessage의 NullValueHandling 속성을 설정할 수 있습니다.


    public class Response
    {
        public string Status;

        public string ErrorCode;

        [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
        public string ErrorMessage;
    }


    var response = JsonConvert.DeserializeObject<Response>(data);

이 방법의 이점은 데이터 정의(무엇)와 역직렬화(사용)를 분리하는 것입니다.이것에 의해, 역직렬화(사용)는 데이터 속성에 신경 쓸 필요가 없어지기 때문에, 2명이 함께 작업할 수 있어 역직렬화 스테이트먼트가 명확하고 심플하게 됩니다.

'Error' 이벤트를 구독하고 필요에 따라 직렬화 오류를 무시할 수 있습니다.

    static void Main(string[] args)
    {
        var a = JsonConvert.DeserializeObject<DataTable>("-- JSON STRING --", new JsonSerializerSettings
        {
            Error = HandleDeserializationError
        });
    }

    public static void HandleDeserializationError(object sender, ErrorEventArgs errorArgs)
    {
        var currentError = errorArgs.ErrorContext.Error.Message;
        errorArgs.ErrorContext.Handled = true;
    }

ASP.NET CORE: 인정된 답변은 완벽하게 기능합니다.단, 그 해답을 글로벌하게 적용하기 위해startup.cs줄서다ConfigureServicesmethod는 다음과 같이 기술합니다.

    services.AddControllers().AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
    });

답변은 에서 테스트되고 있습니다.Net Core 3.1 프로젝트

언급URL : https://stackoverflow.com/questions/31813055/how-to-handle-null-empty-values-in-jsonconvert-deserializeobject

반응형