注:此乃「流水帳」式的水文,營養成分較低,高手請自動無視以下內容,否則引起消化不良等症狀等,一概不管 ^_^
c#自從3.0開始,提供了很多便捷的語法特性(俗稱「語法糖」),以簡化程式設計師的工作量,同時也讓程式設計變得更有樂趣,但是凡事有利必有弊。
比如我們有乙個類,希望能序列化成字串後,以string方式在silverlight與wcf(或其它後台程式設計技術)之間傳輸。
using system.io;using system.text;
using system.xml.serialization;
namespace xmlclassserelizer
//這裡我們利用了"自動屬性"這一語法特性。
public string serialize()
catch
}return result;
}public void deserialize(string xmlstring)
}catch }}
}
在silverlight中的使用**,示例如下:
string strperson = new person().serialize();
生成的字串如下:
<?xml version="1.0" encoding="utf-8"?>
即:沒有或節點,如果希望生成乙個空的name節點,顯然這樣的結果不是您所期待的。
原因在於:
public string name
相當於
private string _name;public string name get }
或
private string _name = default(string);public string name get }
而string在clr中的預設default值為null,在xml序列化的過程中,如果遇到屬性為null,不會生成該屬性的節點。
因此:若想在new乙個物件時,保證所有string型別的屬性,最終序列化時在xml結果中必須要有節點,上面的person類的name屬性**應該改成:
private string _name = "";public string name get }
這樣才有得到期望的xml字串:
<?xml version="1.0" encoding="utf-8"?>
最後,附上一些常用型別的預設default值:
//string s = default(string);//null//datetime d = default(datetime);//0001/1/1 00:00:00
//bool b = default(bool);//false
//int i = default(int);//0
//double db = default(double);
//float f = default(float);
transient關鍵字和序列化方式
transient原理 通俗來說,就是將不需要序列化的屬性前新增transient關鍵字,在序列化的時候,有該關鍵字的屬性不會被序列化。序列化就是將物件的狀態儲存在硬碟上,在需要的時候讀出來使用。有些時候是不希望某個物件在網路上傳輸,寫入到磁碟中的,只希望它的生命週期存在記憶體中,就可以使用tran...
Default關鍵字的使用
default關鍵字在c 有兩種用法,一是用在switch語句中,二是用在泛型中。兩種用法分別如下 1 在switch語句中,如果沒有任何 case 表示式與開關值匹配,則控制傳遞給跟在可選 default標籤後的語句。如果沒有 default標籤,則控制傳遞到 switch 以外。2 在泛型類和泛...
C 中default關鍵字用法簡介
c 中default關鍵字可根據上下文有多種含義。switch語句中使用default處理非case匹配的預設情況。在泛型中使用default,取決於泛型型別是引用型別還是值型別,引用型別的default將泛型型別初始化null,值型別的default將泛型型別初始化為0。在型別應用中可以通過def...