是否有一個函數(也許在ODataLib 5.6.1)序列化.NET原始類型到的OData URI格式(see)序列化值的OData
例如:
new DateTime(2000,12,12).ToODataString() //would return: datetime’2000-12-12T12:00′
是否有一個函數(也許在ODataLib 5.6.1)序列化.NET原始類型到的OData URI格式(see)序列化值的OData
例如:
new DateTime(2000,12,12).ToODataString() //would return: datetime’2000-12-12T12:00′
隨着靜態類Microsoft.Data.OData.Query.ODataUriUtils, 可以調用ConvertToUriLiteral序列化值URI文字。
public static string ConvertToUriLiteral(object value, ODataVersion version)
public static string ConvertToUriLiteral(object value, ODataVersion version, IEdmModel model)
public static string ConvertToUriLiteral(object value, ODataVersion version, IEdmModel model, ODataFormat format)
你可以叫ConvertFromUriLiteral做反序列化。
public static object ConvertFromUriLiteral(string value, ODataVersion version)
public static object ConvertFromUriLiteral(string value, ODataVersion version, IEdmModel model, IEdmTypeReference typeReference)
太棒了!謝謝。 – Nestor
這裏是我的臨時實現,直到有人知道ODataLib中的函數。
static public string ToODataUriString(object value)
{
if (value == null) return "null";
switch (value.GetType().FullName)
{
case "System.Guid":
return string.Format("guid'{0}'", (Guid)value);
case "System.Decimal":
return string.Format("{0}m", (decimal)value);
case "System.Single":
return string.Format("{0}f", ((Single)value).ToString("R"));
case "System.Double":
return string.Format("{0}d", ((double)value).ToString("R"));
case "System.Boolean":
return string.Format("{0}", (Boolean)value).ToLower();
case "System.DateTime":
{
DateTime dvalue = (DateTime)value;
string format;
if (dvalue.Second==0 && dvalue.Millisecond==0)
format = "yyyy-MM-ddTHH:mm"; //datetime’yyyy-mm-ddThh:mm[:ss[.fffffff]]’
else if (dvalue.Millisecond == 0)
format = "yyyy-MM-ddTHH:mm:ss"; //datetime’yyyy-mm-ddThh:mm[:ss[.fffffff]]’
else
format = "yyyy-MM-ddTHH:mm:ss.fffffff"; //datetime’yyyy-mm-ddThh:mm[:ss.fffffff]]’
return string.Format("datetime'{0}'", dvalue.ToString(format));
}
case "System.DateTimeOffset":
return string.Format("datetimeoffset'{0}Z'", ((DateTimeOffset)value).ToString("s"));
case "System.Int16":
case "System.Int32":
case "System.Byte":
return value.ToString();
case "System.Int64":
return string.Format("{0}L", value);
case "System.TimeSpan":
return string.Format("time'{0}'", (TimeSpan)value);
case "System.String":
// TODO Need better quote handling for escaping, this is not correct
return string.Format("'{0}'", value.ToString().Replace("'", "''"));
default:
// TODO Need better quote handling for escaping, this is not correct
return string.Format("'{0}'", value.ToString().Replace("'", "''"));
}
}
有一個[組的內置類(http://msdn.microsoft.com/en-us/library/system.web.http.odata.formatter.serialization.odataserializer%28v=vs .111%29.aspx),但它不會很漂亮。 – Haney
這些類似乎是有效載荷,而不是uri。我錯了? – Nestor
可能沒有錯。我更多的意思是向你展示OData名稱空間周圍的一些文檔的路徑......我不相信序列化程序是A)簡單並且可以應用於任何對象,或者2)尚未公開。抱歉。 – Haney