考虑代码...
using System;
using System.Text.Json;
public class Program
{
public static void Main()
{
int id = 9;
string str = "{\"id\": " + id + "}";
var u = JsonSerializer.Deserialize<User>(str);
Console.WriteLine($"User ID: {u.Id}, Correct: {id == u.Id}"); // always 0/init/default value
}
}
public class User {
public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
为什么数据没有正确反序列化到User对象中?我还通过DotNetFiddle验证了该行为,以防它是我系统的本地问题。不会抛出任何异常。
我的实际执行是从读[ApiController]的[HttpPost]后我的行动return Created("user", newUser)。它在我的 MVC/Razor 项目中通过_httpClient.PostAsync. 我在Created返回到PostAsync调用时验证了这些值是正确的,但无论如何,从响应正文解析的值仅包含默认值(实际 ID …
给定 Base64 字符串,以下示例类将使用Newtonsoft.Json正确反序列化,但不能使用System.Text.Json:
using System;
using System.Text.Json.Serialization;
public class AvatarImage{
public Byte[] Data { get; set; } = null;
public AvatarImage() {
}
[JsonConstructor]
public AvatarImage(String Data) {
//Remove Base64 header info, leaving only the data block and convert it to a Byte array
this.Data = Convert.FromBase64String(Data.Remove(0, Data.IndexOf(',') + 1));
}
}
Run Code Online (Sandbox Code Playgroud)
对于 System.Text.Json,会引发以下异常:
must bind to an object property or field on deserialization. Each parameter name must match with a property or field on the …Run Code Online (Sandbox Code Playgroud) 我创建了 CRUD 控制器。创建模型时,我需要使用架构:
{ "id": int, "name": string }
Run Code Online (Sandbox Code Playgroud)
但控制器也绑定了模式
{ "Id": int, "Name": string }
Run Code Online (Sandbox Code Playgroud)
如何强制控制器仅绑定小写版本{ "id": int, "name": string }?