如何在Json.net中设置只读属性的值,在JsonConverter中。

4

我正在使用Json.net 4.5。我正在使用JsonConverter将数据从一个版本转换为另一个版本。

版本1

    public class AV1
    {
        public string PNr { get; set; } // "x253yN-69Uj"
    }

版本2

    public class AV2
    {
        public string FirstNr { get; private set; } // "x253yN"
        public string LastNr { get; private set; } // "69Uj"

        public void SetFirstAndLastNr(string a, string b, string c)
        {
            //Logic to set the values of FirstNr and LastNr
        }
    }

在派生的JsonConverter中,我正在创建AV2类的实例。但由于属性现在是只读属性,我应该如何设置这些属性的值? Json.net提供了任何方法来执行此操作吗?还是我必须使用反射?

JSON.NET拥有许多优秀的功能,这些功能是开箱即用的序列化器所不具备的。它甚至被微软自己采用作为其中一个产品(ASP.NET Web API)的默认序列化器。 - carlosfigueira
1
在AV2类的方法SetFirstAndLastNr中,参数abc分别代表什么意思? - carlosfigueira
@carlosfigueira - 参数a、b、c是查询存储库的一些查询参数,根据查询结果计算一个唯一的数字,现在分成了这个FirstNr和LastNr。还有其他例如逻辑路径和文档名称等的示例。但我认为我们完全不需要关心这种方法。 - keyr
2个回答

2

如果您想反序列化只读属性,也许可以尝试这样做。

public class AV2
{
    [JsonProperty]
    private readonly string _firstNr;
    [JsonProperty]
    private readonly string _lastNr;
    public string FirstNr => _firstNr// "x253yN"
    public string LastNr => _lastNr// "69Uj"


}

-4

如你所说,你有数百个不同的类需要转换,JsonDeserializer可能不是最佳选择。

看看其他解决方案,比如AutoMapper也不失为一个好主意:http://automapper.org/https://github.com/AutoMapper/AutoMapper

如果你花一两个小时看看示例代码,你会发现它非常强大和灵活,可以将不同的对象相互转换(映射)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接