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