【发布时间】:2015-10-02 06:53:20
【问题描述】:
我在服务器和客户端都有以下课程
public class Entity
{
public string Id {get; set;}
public string Name {get; set;}
public Dictionary<string, object> DynamicProperties {get; set;}
}
据我所见,开放类型的所有示例都描述了在服务器端具有动态属性,但客户端上的属性需要显式声明。当我从客户端发送 POST 请求时,我该如何发送动态属性 ?.我无法在客户端声明所有动态属性。有许多属性,每个对象将在客户端包含不同的动态属性集。这些动态属性存储在客户端的 DynamicProperties 字典中。如何将上述实体类的对象发送到服务器端,以便服务器将 DynamicProperties 字典的内容解释为动态属性?任何帮助表示赞赏。
============================跟进sam的回答=========== ============
static void Main(string[] args1)
{
container.Customers.ToList();
Customer newCustomer = new Customer();
newCustomer.Id = 19;
newCustomer.Properties = new Dictionary<string, object>
{
{"IntProp", 9},
{"DateTimeOffsetProp", new DateTimeOffset(2015, 7, 16, 1, 2, 3, 4, TimeSpan.Zero)},
{"blah","ha"}
};
try
{
addCustomer(newCustomer);
container.AddToCustomers(newCustomer);
container.SaveChanges();
}
catch (Exception)
{
}
Customer newCustomer1 = new Customer();
newCustomer1.Id = 20;
newCustomer1.Properties = new Dictionary<string, object>
{
{"IntProp", 10},
{"dir","north"}
};
addCustomer(newCustomer1);
container.AddToCustomers(newCustomer1);
container.SaveChanges();
newCustomer1.Properties["dir"] = "south";
container.UpdateObject(newCustomer1);
container.SaveChanges();
Console.ReadKey();
}
private static void addCustomer(Customer customer)
{
container.Configurations.RequestPipeline.OnEntryStarting(args =>
{
foreach (var property in customer.Properties)
{
args.Entry.AddProperties(new ODataProperty
{
Name = property.Key,
Value = property.Value // for enum, complex type, should to create ODataEnumValue and ODataComplexValue.
});
}
});
}
我收到一条错误消息,指出 在一个条目或一个复杂值中检测到多个名为“IntProp”的属性。在 OData 中,不允许重复的属性名称。另外,我怀疑每次在发送对象之前创建一个动作,就像我现在所做的那样是一种有效的方法,因为我从一个源获取大量对象并将其发送到服务器。如果我为每个对象创建一个动作,那么它可能会炸毁内存,因为 oData 客户端将这些动作保存在内存中。我该如何处理我的场景?请帮助我。
另外,如果我对 container.Customers.ToList() 发表评论,还有一个问题,表明我正在尝试添加未声明的属性。这是为什么呢?
【问题讨论】:
标签: c# asp.net-web-api odata asp.net-web-api2