Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带if条件的JSON C#类初始化_C#_Json_.net - Fatal编程技术网

带if条件的JSON C#类初始化

带if条件的JSON C#类初始化,c#,json,.net,C#,Json,.net,我正在构建一个web应用程序,根据用户的选择生成报价。 在我的业务逻辑中,我最终得到了30+个if条件,因为每个属性都进行不同的计算,并且不断增长 我想知道是否有更有效的方法来做到这一点 第一:有没有比为每个属性调用反序列化对象更好的方法将我的json对象反序列化为c#对象 第二:如果我把一些业务逻辑放到类构造函数中,效率会更高吗 第三:有没有更好的方法来实现这一点,更符合面向对象编程 FormHolder类的每个属性都是一个不同的c#类,我也可以在其中添加构造函数 编辑#1:“Business

我正在构建一个web应用程序,根据用户的选择生成报价。 在我的业务逻辑中,我最终得到了30+个if条件,因为每个属性都进行不同的计算,并且不断增长

我想知道是否有更有效的方法来做到这一点

第一:有没有比为每个属性调用
反序列化对象
更好的方法将我的json对象反序列化为c#对象

第二:如果我把一些业务逻辑放到类构造函数中,效率会更高吗

第三:有没有更好的方法来实现这一点,更符合面向对象编程

FormHolder
类的每个属性都是一个不同的c#类,我也可以在其中添加构造函数

编辑#1:“BusinessLogic”中接收到的
jsonForm
并非始终包含所有字段。例如,属性
LiftingEquipment
并不适用于每次调用。在本例中,我处理由
反序列化对象生成的
null

缩短示例:

public class FormHolder
{
    public FormHolder(string quoteForm)
    {
        liftingEquipment = JsonConvert.DeserializeObject<LiftingEquipment>(quoteForm);
        equipmentSpec = JsonConvert.DeserializeObject<EquipmentSpec>(quoteForm);
        squareDuctWork = JsonConvert.DeserializeObject<SquareDuctWork>(quoteForm);
    }

    public LiftingEquipment liftingEquipment {get; set;}
    public EquipmentSpec equipmentSpec { get; set; }
    public SquareDuctWork squareDuctWork { get; set; }
}

public class BusinessLogic 
{
    public decimal FinalPrice(string jsonForm) 
    {
        decimal finalPrice = 0;
        FormHolder form = new FormHolder(jsonForm);

        if(form.liftingEquipment > 1)
            finalPrice += 11;
        
        if(form.equipmentSpec = "ANYTHING")
            finalPrice -= 2;
        
        if(form.squareDuctWork != null)
            finalPrice += 5

        return finalPrice;
    }
}
公共类表单持有者
{
公共表单持有者(字符串quoteForm)
{
liftingEquipment=JsonConvert.DeserializeObject(quoteForm);
equipmentSpec=JsonConvert.DeserializeObject(quoteForm);
squareDuctWork=JsonConvert.DeserializeObject(quoteForm);
}
公共提升设备提升设备{get;set;}
公共设备规范设备规范{get;set;}
公共方形管网方形管网{get;set;}
}
公共类业务逻辑
{
公共十进制最终价格(字符串jsonForm)
{
十进制最终价格=0;
表格持有人表格=新表格持有人(jsonForm);
如果(表格提升设备>1)
最终价格+=11;
如果(form.equipmentSpec=“任何东西”)
最终价格-=2;
if(form.Square管网!=空)
最终价格+=5
返回最终价格;
}
}

表单持有者
内调用
反序列化对象
时,您的意思是传递每个类类型的整个
quoteForm
或特定属性
quoteForm
?为什么不从字符串中反序列化整个Formholder?我传递整个
quoteForm
,因为
jsonForm
中的字段可能存在,也可能不存在。我不知道如何只将json字符串的特定字段传递给我的类构造函数您可以使用
字典
而不是单个属性。您可以将其命名为
QuoteParts
或类似的名称。然后,无论填写什么部分,您都会在字典中放入一个可序列化对象,其中“key”表示引用部分的名称<代码>字典
从/到很好地序列化JSON@Fildor,我试图直接反序列化到
FormHolder
,但因为
FormHolder
包含其他类,所以它似乎不起作用。也许我做错了?当您在
表单持有者
内部调用
反序列化对象
时,您的意思是传递每个类类型的整个
quoteForm
或特定属性
quoteForm
?为什么不从字符串中反序列化整个Formholder?我传递整个
quoteForm
,因为
jsonForm
中的字段可能存在,也可能不存在。我不知道如何只将json字符串的特定字段传递给我的类构造函数您可以使用
字典
而不是单个属性。您可以将其命名为
QuoteParts
或类似的名称。然后,无论填写什么部分,您都会在字典中放入一个可序列化对象,其中“key”表示引用部分的名称<代码>字典
从/到很好地序列化JSON@Fildor,我试图直接反序列化到
FormHolder
,但因为
FormHolder
包含其他类,所以它似乎不起作用。也许我做错了?