c#如何在我的班级中添加属性而无需更改原始班级

时间:2017-02-23 14:14:51

标签: c# json

我有一个从JSON输入字符串创建的模型。但是,其中一个名为PortfolioHolding的类没有我希望在最终结果中返回的字段。我目前的解决方案是在现有的Model类中添加该字段。但是,当我调试时,它失败了bc JSON输入字符串不正确。我尝试将[JsonIgnore]添加到我希望在反序列化期间忽略的字段中,但这也无济于事。

如何根据我的JSON输入文件动态地向我的类添加属性并使输入正确?

public class PortfolioHolding
    {
        public string fundIdentifier { get; set; }
        public int fundRating { get; set; }
        public double fundExpenseRatio { get; set; }
        public double fundWeight { get; set; }
        [JsonIgnore]
        public double fundAlpha { get; set; } //MODIFIED by adding fundAlpha attribute
    }

实际模型不包括fundAlpha,我的测试在调试期间通过。

3 个答案:

答案 0 :(得分:2)

我很抱歉我之前提供的解决方案。

我理解的是,您希望使用相同的模型类从JSON获取输入并将该模型返回到项目的某个位置。

可以有两种可能的解决方案。

1)在场景中,您正在从同一个库或命名空间中的数据库(它可以是文件)中读取数据(JSON),您可以使用internal关键字。在同一个命名空间内,您将可以访问该属性,并且不会访问命名空间。

2)您可以从结果集中选择匿名对象,如

resultSet.Select(a => new { a.col1, a.col2, a.col3, /*and skip the one which you don't want to be selected*/})

答案 1 :(得分:1)

您可以从mergeInto创建匿名类型并将其序列化:

PortfolioHolding

答案 2 :(得分:0)

使用ExpandoObject

表示一个对象,其成员可以在运行时动态添加和删除。

dynamic expando = new ExpandoObject();
expando.Prop1= 1;
expando.Prop2 = "Test";

反序列化时使用列表:

var exConverter = new ExpandoObjectConverter();
dynamic obj = JsonConvert.DeserializeObject<List<ExpandoObject>>(json, exConverter);