gpt4 book ai didi

c# - 可空结构和 TypeNameHandling.Auto 的 JSON.NET 序列化

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:11 24 4
gpt4 key购买 nike

以下程序:

using System;
using Newtonsoft.Json;

namespace JsonPlayground
{
public class Program
{
private struct Message
{
public string Value { get; }

[JsonConstructor]
public Message(string value)
{
if (value == null) throw new ArgumentNullException(nameof(value));

Value = value;
}
}

private class ObjectWithOptionalMessage
{
public Message? Message { get; }

public ObjectWithOptionalMessage(Message? message)
{
Message = message;
}
}

public static void Main(string[] args)
{
var objWithMessage = new ObjectWithOptionalMessage(new Message("Hello!"));

var serializerSettings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto,
Formatting = Formatting.Indented
};

Console.WriteLine(JsonConvert.SerializeObject(objWithMessage, serializerSettings));
}
}
}

给我以下输出:

{
"Message": {
"$type": "System.Nullable`1[[JsonPlayground.Program+Message, JsonPlayground]], System.Private.CoreLib",
"Value": "Hello!"
}
}

而且我想不出为什么 $type 应该包含在明确声明的属性中的原因。如果我将 Message 属性声明为不可为 null,则不包括 $type 属性。

我做错了什么?

最佳答案

DavidG 的评论起到了作用,因此将其表述为答案,应用 JsonPropertyAttribute,如下所示:

    private class ObjectWithOptionalMessage
{
[JsonProperty(TypeNameHandling = TypeNameHandling.None)]
public Message? Message { get; }

public ObjectWithOptionalMessage(Message? message)
{
Message = message;
}
}

似乎确实为我解决了问题。

关于c# - 可空结构和 TypeNameHandling.Auto 的 JSON.NET 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40108477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com