微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在反序列化 JsonProperty 时只允许设置属性的最佳方法?

如何解决在反序列化 JsonProperty 时只允许设置属性的最佳方法?

我想读入 id 但我不想在读入后设置它。 _processing 变量是在读入文件和反序列化时设置的,因此可以设置。有没有更优雅的内置方式来处理这个问题?

    private string _id;
    [JsonProperty(PropertyName = "id")]
    public string id
    {
        get { return _id; }
        set
        {
            if (_processing) // Only allow when reading the file
            {
                _id = value;
            }
        }
    }

解决方法

如果您只能使用 init 属性(C#9.0 起)(https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/init):

[JsonProperty(PropertyName = "id")]
public string Id { get; init; }

如果没有...

private string _id;
[JsonProperty(PropertyName = "id")]
public string Id
{
    get { return _id; }
    set { _id ??= value; }
}

如果在 json 中找不到设置默认属性值的无关但有用的链接:Default value for missing properties with JSON.net

,

在 C# 7.3 及更早版本中,您可以像这样使用空合并运算符:

https://sitename.com/contact.php

在 C# 8.0 及更高版本中,您可以执行以下操作:

    set
    {
        _id = _id ?? value;
    }

??= 如果左侧操作数的计算结果为非空,则运算符不会计算其右侧操作数。

,

我认为只使用私人二传手就可以了。只是不要再次调用它。 如果它们相同,您也可以省略属性名称。

    private string _id;
    [JsonProperty(PropertyName = "id")]
    public string id
    {
        get { return _id; }
        private set
        {
            _id = value;
        }
    }

    [JsonProperty]
    public string id { get; private set; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。