繁体   English   中英

如何将具有 C# 中的值结构的 class 序列化为 JSON?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM