在运行时从类中删除属性是否可行,例如:
public Class A
{
public int num1 {get;set;}
public int num2 {get;set;}
public int num3 {get;set;}
}
Class A Obj = new A();
我想在运行时从obj
中删除num2
。这可能吗?
在运行时从类中删除属性是否可行,例如:
public Class A
{
public int num1 {get;set;}
public int num2 {get;set;}
public int num3 {get;set;}
}
Class A Obj = new A();
我想在运行时从obj
中删除num2
。这可能吗?
无法完成此操作。一旦编译,类定义便会固定。
我有一个非常精确的用例。在我的情况下,当通过Json将数据模型发布到ODATA时,我想忽略一些属性。这个属性可能不是表字段,所以我想在将其序列化为JSON时忽略它。我通过以下步骤实现了这一点。
ISerializer
来忽略只读属性,如下所示:public string Serialize(object obj)
{
return JsonSerializer.Serialize(obj,
new JsonSerializerOptions
{
IgnoreReadOnlyProperties = true
});
}
正如其他人已经说过的,这是不可能的。
相反,您可以添加另一个属性,例如:
public List<string> ignoredProperties {get; set;}
然后在运行时将num2
添加到该列表中,并检查应忽略的属性。
你需要采用模型/视图模型的方法。创建一个视图模型,其中包含满足你需求的有限属性。
我同意Nic的回复:这是不可能的。一旦编译,类定义就被确定了。
但是你可以通过反射动态地创建一个你想要的类属性。
我无法删除该属性,我试图创建一个动态JSON,将两个不同的类合并在一起,但是没有某些属性(对于该合并类不需要),所以我添加了一个自定义属性并添加到我不需要的字段/属性,并使用反射在运行时创建自定义JSON,然后合并2个类。
//Convert your object to JObject
var jsonDoc = JObject.FromObject(doc);
//Select the Property To Remove
var PropertyToRemove= jsonDoc.Property("PropertyToRemove");
// Remove the Property
sig.Remove();
我的情况要简单得多。
我有一个类是POST的,
然后我需要删除一些属性并将其保存为JSON。
我使用了System.Dynamic.ExpandoObject来复制这个类。
Object value;
System.Dynamic.ExpandoObject cloneData = JsonSerializer.Deserialize<ExpandoObject>(JsonSerializer.Serialize(data));
cloneData.Remove("IP", out value);
value = value;
cloneData.Remove("analytics", out value);
value = value;
string azurecontainer = @"data";
string azureblobJSONDataFilename = @"profile/" + _userInfoSessionB.u + @".json";
string JSONData = JsonSerializer.Serialize(cloneData);
object p = azureStorage.UploadBlob2ContainerTextAsync(JSONData, azurecontainer, azureblobJSONDataFilename, "application/json", "public, max-age=30");