[英]Set default value while XML Deserialization C#
考慮下面的類
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
使用 XML 文件中的一些值序列化此 Person 類(名稱和年齡)並反序列化返回。 我想在反序列化時 Name 值為 Null 或 Empty 時分配一些默認值。 我試過如下,但它不工作。
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
if (_name == null)
{
_name = "Some Name";
}
}
}
}
使用 XmlSerializer 反序列化 C# 對象時如何設置 string 和 int 字段的默認值。
問題是您已經將默認值的邏輯放在了 setter 中,並且沒有被調用,因為在您反序列化的 XML 中沒有相關數據。
當XmlSerializer
反序列化時,它會首先調用構造函數,然后設置值。 因此,如果您想設置默認值,請在構造函數中進行。 任何你有反序列化值的東西都會被應用到它上面,那些你沒有的東西仍然會有默認值。
public class Person
{
public Person()
{
Name = "Default Name";
}
public string Name { get; set; }
}
您必須在Contructor
內部初始化property
,如Own Pauling
或者你可以像這樣auto-initialize
:
public class Person{
public string Name { get; set; } = "Some name"
public int Age { get; set; } = 18
}
在您的代碼演示中。
當您在Deserialization
之前將某些內容(任何內容,甚至null
)設置為property
時,它才起作用。
由於其他答案也建議默認值應解釋為由默認構造函數分配給屬性的值。
如果你想要一個 XML 序列化器,它可以考慮默認值(不會序列化具有默認值的屬性)你可以試試這個(免責聲明:由我編寫)。
因此,您可以按如下方式定義Person
類。
public class Person
{
[DefaultValue("Some Name")]
public string Name { get; set; } = "Some Name";
[DefaultValue(50)]
public int Age { get; set; } = 50;
}
在這里看到一個活生生的例子。 這些庫在NuGet上可用。 它支持 Linq2Xml ( XElement
) 和常規XmlWriter
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.