The JSON value could not be converted to System.Int32

前端 未结 6 1819
南方客
南方客 2020-12-03 02:39

I want to send data of object to my Web API. The API accepts a parameter of class, which properties are type of int and string.

This is my class:

publi         


        
相关标签:
6条回答
  • 2020-12-03 03:06

    Better parse the values to Integer and send data to Server Side application from your Client side application, This worked for me. Happy Coding!!

    {
      "id":parseInt(0),
      "sayi":parseInt(9),
      "reqem":parseInt(8),
      "yazi":"sss"
     }
    
    0 讨论(0)
  • 2020-12-03 03:08

    First you should create a JsonConverter for it:

    using System;
    using System.Buffers;
    using System.Buffers.Text;
    using System.Text.Json;
    using System.Text.Json.Serialization;
    
    namespace sample_22_backend.Converters
    {
        public class IntToStringConverter : JsonConverter<int>
        {
            public override int Read(ref Utf8JsonReader reader, Type type, JsonSerializerOptions options)
            {
                if (reader.TokenType == JsonTokenType.String)
                {
                    ReadOnlySpan<byte> span = reader.HasValueSequence ? reader.ValueSequence.ToArray() : reader.ValueSpan;
                    if (Utf8Parser.TryParse(span, out int number, out int bytesConsumed) && span.Length == bytesConsumed)
                    {
                        return number;
                    }
    
                    if (int.TryParse(reader.GetString(), out number))
                    {
                        return number;
                    }
                }
    
                return reader.GetInt32();
            }
    
            public override void Write(Utf8JsonWriter writer, int value, JsonSerializerOptions options)
            {
                writer.WriteStringValue(value.ToString());
            }
        }
    }
    

    Then use it this way on your model's properties:

    [JsonConverter(typeof(IntToStringConverter))]
    public int GenreId { set; get; }
    

    Or you can add it globally:

    services.AddControllers()
            .AddJsonOptions(options => 
                    options.JsonSerializerOptions.Converters.Add(new IntToStringConverter()));
    
    0 讨论(0)
  • 2020-12-03 03:18

    There is an another way: just create a DTO with the type string for number types and convert it into the controller or to the type that you need.

    0 讨论(0)
  • 2020-12-03 03:19

    For Asp.Net Core 3.0, it uses System.Text.Json for serialization and deserialization.

    For using old behavior, you could use Json.NET in an ASP.NET Core 3.0 project by referencing Json.NET support.

    Short Answer:

    1. Install Microsoft.AspNetCore.Mvc.NewtonsoftJson which is preview version.
    2. Change to services.AddControllers().AddNewtonsoftJson();
    0 讨论(0)
  • 2020-12-03 03:19

    In .NET CORE 3.X the serialize/deserialize process is done using System.Text.Json not Newtonsoft Json. Edward's answer did not work entirely for me:

    1. Installing from Nuget Manager Microsoft.AspNetCore.Mvc.NewtonsoftJson won't make step 2 to compile.
    2. Yes, add in Startup services.AddControllers().AddNewtonsoftJson(); - you will receive an error, AddNewtonsoftJson() not recognized.

    At least this happened to me.

    As a fix, uninstall what you've installed at step 1. In package manager console, run: Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson -Version 3.0.0-preview8.19405.7 . This worked for me.

    0 讨论(0)
  • 2020-12-03 03:26

    in js model, make sure your values are formatted as parseFloat();

    0 讨论(0)
提交回复
热议问题