[英]How do I serialize a class with value structs in C# to JSON?
我有一个 class 与 C# 中的值结构我有问题正确序列化到 JSON 与 Newtonsoft.ZEED35385B8088A6EE60.
值结构看起来像
public struct ValueName
{
private readonly string name;
internal ValueName(string valueName)
{
this.name = valueName;
}
public static implicit operator string(ValueName valueName) => valueName.name;
public static explicit operator ValueName(string valueName) => new (valueName);
}
然后用于 class
public struct AnClass
{
private readonly ValueName name;
public AnClass(string name)
: this(new ValueName(name))
{
}
public ValueName Name { get; }
}
但是当我尝试使用 Newtonsoft.Json 序列化到 JSON 时,结果如下:
{"Name": {"Name": "Some-Actual-Name"}}
当我期待
{"Name": "Some-Actual-Name"}
我尝试使用包含SerializationInfo info, StreamingContext context
的受保护构造函数来制作 class 和值 struct ISerializable
均无济于事。
如果构造函数参数的名称和属性匹配并且字段/属性是公共的,Newtonsoft 可以处理不可变的类/结构。 如果字段/属性是内部/私有或名称不匹配,则需要 JsonProperty 属性。
using System;
using Newtonsoft.Json;
public class Program
{
public static void Main()
{
var source = new ValueName("foo");
var json = JsonConvert.SerializeObject(source);
var target = JsonConvert.DeserializeObject<ValueName>(json);
Console.WriteLine(target.Name);
}
}
public struct ValueName
{
[JsonProperty]
internal readonly string Name;
public ValueName(string name)
{
Name = name;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.