【发布时间】:2016-11-04 03:08:28
【问题描述】:
基本上,我在 C# 之后使用相当于以下 JavaScript 语法:
var obj = {id: 1};
obj["prop1"] = 100;
obj["prop2"] = 200;
是否可以使用 WebAPI 控制器操作向 C# 对象动态添加属性并序列化为 JSON?
我的 C# 对象:
public class MyObject
{
public int Id { get; set; }
public MyChildObject[] Chidren { get; set; }
public int this[string prop]
{
get { return Chidren.Single(x => x.PropertyName == prop).Value; }
}
}
public class MyChildObject
{
public string PropertyName { get; set; }
public int Value { get; set; }
}
我想回馈给客户的是这样的:
{
id: 1,
prop1: 100,
prop2: 200
}
此测试通过但显然只是因为属性是在运行时访问的。但是,它们没有被序列化:
[TestMethod]
public void CanAccessDymaicProperties()
{
var dto = new MyObject
{
Id = 1,
Chidren = new[]
{
new MyChildObject { PropertyName = "prop1", Value = 100 },
new MyChildObject { PropertyName = "prop2", Value = 200 },
}
};
Assert.AreEqual(dto["prop1"], 100);
Assert.AreEqual(dto["prop2"], 200);
}
【问题讨论】:
-
我很欣赏简短的回答可能是“否”,但想探索我的选择
-
看看
ExpandoObject; msdn.microsoft.com/en-us/library/… -
除了下面给出的答案之外,您还可以使用匿名类型并执行以下操作 var x = new { id = 1, name= "Tom", numbers = new[] { 1,2, 3}};这种对象可以从 webapi 作为 Json 返回,并在客户端从 Javascript 使用。见stackoverflow.com/questions/10123371/…
标签: c# serialization asp.net-web-api