gpt4 book ai didi

c# - C# 中类似 JavaScript 的动态属性

转载 作者:行者123 更新时间:2023-11-30 19:37:24 24 4
gpt4 key购买 nike

基本上我追求的是 C# 等同于以下 JavaScript 语法:

var obj = {id: 1};
obj["prop1"] = 100;
obj["prop2"] = 200;

是否可以动态地向 C# 对象添加属性并使用 WebAPI Controller 操作序列化为 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);
}

最佳答案

您可以使用 ExpandoObjectdynamic关键词:

dynamic o = new ExpandoObject();
o.Prop1 = 100;
o.Prop2 = "Sample";
JsonConvert.SerializeObject(o); // {"Prop1":100,"Prop2":"Sample"}

如果您只需要序列化键/值对的自定义集合,您应该使用 Dictionary<string, object> :

var dic = new Dictionary<string, object>();
dic["Prop1"] = 100;
dic["Prop2"] = "Sample";
JsonConvert.SerializeObject(dic); // {"Prop1":100,"Prop2":"Sample"}

正如@derloopkat 在评论中所说,您还可以使用匿名对象:

var o = new { Prop1 = 100, Prop2 = "Sample" };
JsonConvert.SerializeObject(o);

关于c# - C# 中类似 JavaScript 的动态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38149902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com