How to handle null/empty values in JsonConvert.DeserializeObject

后端 未结 4 706
执笔经年
执笔经年 2020-12-12 22:52

I have the following code:

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

Then, I tried:

var          


        
相关标签:
4条回答
  • 2020-12-12 23:04

    The accepted answer works perfectly. But in order to make the answer apply globally, in startup.cs do the following:

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

    The answer has been tested in a .Net Core 3.1 project.

    0 讨论(0)
  • 2020-12-12 23:13

    You can subscribe to the 'Error' event and ignore the serialization error(s) as required.

        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;
        }
    
    0 讨论(0)
  • 2020-12-12 23:22

    An alternative solution for Thomas Hagström, which is my prefered, is to use the property attribute on the member variables.

    For example when we invoke an API, it may or may not return the error message, so we can set the NullValueHandling property for ErrorMessage:

    
        public class Response
        {
            public string Status;
    
            public string ErrorCode;
    
            [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
            public string ErrorMessage;
        }
    
    
        var response = JsonConvert.DeserializeObject<Response>(data);
    

    The benefit of this is to isolate the data definition (what) and deserialization (use), the deserilazation needn’t to care about the data property, so that two persons can work together, and the deserialize statement will be clean and simple.

    0 讨论(0)
  • 2020-12-12 23:23

    You can supply settings to JsonConvert.DeserializeObject to tell it how to handle null values, in this case, and much more:

    var settings = new JsonSerializerSettings
                        {
                            NullValueHandling = NullValueHandling.Ignore,
                            MissingMemberHandling = MissingMemberHandling.Ignore
                        };
    var jsonModel = JsonConvert.DeserializeObject<Customer>(jsonString, settings);
    
    0 讨论(0)
提交回复
热议问题