如何阻止JsonSerializer.Deserialize将Null转换为空字符串
解决System.Text.Json反序列化时null被转为空字符串的问题
你的问题根本不在反序列化环节,而是手动拼接JSON字符串时出了错:当message为null时,字符串插值$"{message}"会直接把null替换成空字符串,导致生成的JSON是{"message": ""},而不是预期的{"message": null}。反序列化拿到的是空字符串,完全是因为输入的JSON本身就不对。
正确的解决办法有两种:
1. 用JsonSerializer生成JSON(推荐)
不要手动拼JSON,直接用JsonSerializer.Serialize把对象序列化成JSON字符串,这样null值会被正确序列化为null:
public async Task GetDocument() { string message = null; // 先构造Document对象 var document = new Document { Message = message }; // 序列化生成正确的JSON var documentMessage = JsonSerializer.Serialize(document); var value = GetDocumentMessageObject(documentMessage); //Continue code }
2. 手动拼接时处理null(不推荐)
如果一定要手动构造JSON,需要判断message是否为null,生成对应的JSON片段:
public async Task GetDocument() { string message = null; // 当message为null时,直接写"null",否则加引号 var messageValue = message == null ? "null" : $"\"{message}\""; var documentMessage = $"{{\"message\": {messageValue} }}"; var value = GetDocumentMessageObject(documentMessage); //Continue code }
这样生成的JSON里,message的值会是null,反序列化后就能得到null而不是空字符串了。
内容的提问来源于stack exchange,提问作者Ali Vojdanian
相关产品推荐
相关产品推荐

