[英]What is the best practice for serializing C# immutable structs?
我通常將結構設為只讀。 但是,序列化庫(例如DataContractSerializer
)期望序列化的字段或屬性是可讀寫的。
所以我相信我的選擇是:
人們在這種情況下通常會做什么?
如果像這樣初始化DataContractSerializer,它可以序列化只讀字段
var serializer = new DataContractSerializer(
typeof(ToSerialize),
new DataContractSerializerSettings()
{
SerializeReadOnlyTypes = true
});
但是,如果您要反序列化具有僅具有吸氣劑的屬性的類,則這僅適用於單向工作。 因此,您可以序列化而不是反序列化以下內容:
[DataContract]
public struct ToSerialize
{
public ToSerialize(string a)
{
PropertyToSerialize = "a";
}
[DataMember]
public string PropertyToSerialize { get; }
}
因此,您可以將一個私有集添加到您的屬性,或者添加一個后備字段並用[DataMember]屬性對其進行標記。
[DataContract]
public struct ToSerialize
{
public ToSerialize(string a)
{
backingField = "a";
}
public string PropertyToSerialize => backingField;
[DataMember]
string backingField;
}
通過使用專用設置器,您很難更改對象的狀態(您可以使用反射來完成)。 因此,如果沒有方法可以更改結構中的字段,並且所有屬性都具有私有設置程序,則該結構在技術上是不可變的。 在您的情況下,我會去找一個私人的二傳手,比起反思,它更易讀,並且花費的精力更少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.