是否可以向现有的json对象添加值?
我的示例代码:
var obj = new { Vall = "myVal1", Val2 = "myVal2", Val3 = "myVal3" };
这就是我尝试做的事情:
obj.AddValue(Val4, "myVal4");
答案 0 :(得分:4)
var obj = new { Vall = "myVal1", Val2 = "myVal2", Val3 = "myVal3" };
尽管有相似之处,不是JSON。这是一个编译器生成的"匿名类型",这意味着编译器为您创建了一个类型,其中包含三个名为string
,Val1
和{{1}的Val
个属性}。除了你不能说出类型名称(它是匿名的)之外,它是一个非常普通的.NET类。不,您无法在运行时向类中添加额外的属性。
最接近你想要的东西可能是Val3
,但说实话,这听起来像你正在尝试做一些奇特的事情。
答案 1 :(得分:2)
正如其他人所指出的那样,你在这里处理的是anonymous types
,而不是JSON对象。不幸的是,它们是编译代码中的自动生成类型,这意味着它们不能随意更改。
一个简单的解决方法是声明一个新的匿名类型,它可以存储一个额外的字段,并将公共字段的值设置为旧对象的值,如下所示:
var obj_old = new { Vall = "myVal1", Val2 = "myVal2", Val3 = "myVal3" };
var obj_new = new { Vall = obj_old.Vall, Val2 = obj_old.Val2, Val3 = obj_old.Val3, Val4 = "myVal4" };
或者,使用附加字段声明对象,该字段的值可在需要时设置:
var obj = new { Vall = "myVal1", Val2 = "myVal2", Val3 = "myVal3", Val4 = String.Empty };
// ...
obj.Val4 = "myVal4";
答案 2 :(得分:0)
C#中匿名类型的属性是只读的,您可以使用Json.Net
克隆此对象并添加属性,如下所示:
var obj = new { ID = 1234, Name = "FooBar" };
obj = JObject.FromObject(obj).Add("feeClass", "A");
最终Json:
{
"ID": 1234,
"Name": "FooBar",
"feeClass": "A"
}