我有一個應用程序包含一個名爲'Task'的業務實體。該實體具有固定的一組屬性,但也具有表現爲expando的能力。將一個匿名類型反序列化爲一個動態
所以,它的模式是這樣的:
namespace RavenResearch
{
public class Task
{
public Guid TaskId { get; set; }
public DateTime CreatedDate { get; set; }
public dynamic DynamicProperties { get; set; }
}
}
當它被保存在RavenDB,它看起來鏈接纔可這個
{
"TaskId": "9cac592f-98ec-4fda-a823-e5402736078e",
"CreatedDate": "2011-09-22T10:25:35.2701544+12:00",
"DynamicProperties": {
"$type": "<>f__AnonymousType0`2[[System.Int32, mscorlib],[System.String, mscorlib]], RavenResearch",
"MatterNumber": 0,
"CustomerNumber": "37"
}
}
當然,當我試圖從另一個程序查詢此數據存儲它會嘗試查找包含int和string的匿名類型。其他程序是最初保存文檔的EXE - 我不想引用它。
什麼是拉出動態屬性的最佳方式?我的目標是能夠從Raven中查詢任務對象列表,並將它們傳遞給Xaml以便在UI中進行渲染 - 這就是爲什麼對Expando的數據綁定對我來說非常有吸引力,在編譯時不需要知道這些屬性。
我創建實例(在烏鴉存儲),像這樣
new RavenResearch.Task()
{
TaskId = Guid.NewGuid(),
CreatedDate = DateTime.Now,
DynamicProperties = new
{
MatterNumber = 0,
CustomerNumber = "37"
}
}
@Jacob聲明:我會失去對動力性能的所有類型的信息,如果我用一本字典 - 不過,我可以做類似這個:
public class Task
{
public Guid TaskId { get; set; }
public DateTime CreatedDate { get; set; }
public Dictionary<string, SimpleValue> DynamicProperties { get; set; }
}
public abstract class SimpleValue
{
}
public class SimpleValue<T> : SimpleValue
{
public T Value
{ get; set; }
public SimpleValue(T value)
{
this.Value = value;
}
}
確實如此,然而我失去了有關MatterNumber和客戶號碼的所有類型信息。 – Adam
它們仍然是int和string。 – Jeremy