我试图在这里生成此代码但没有成功。该属性被序列化并存储在一个文件中:
然后加载并反序列化该文件:
不幸的是,组合框没有更新,因为有一个空引用,如下面的代码中所述
namespace NinjaTrader.Custom.Strategies.SidiSystem
{
[JsonObject(MemberSerialization.OptIn)]
public class SidiSystemBase : Strategy
{
private Setup setup;
private ComboBox spCbSetup;
private void AddSidePanelRight()
{
spCbSetup = new ComboBox
{
ItemsSource = Enum.GetValues(typeof(Setup)),
};
spCbSetup.SelectionChanged += SpCbSetup_SelectionChanged;
}
private void SpCbSetup_SelectionChanged(object sender, RoutedEventArgs rea)
{
if (spCbSetup == null)
{
return;
}
switch ((Setup)spCbSetup.SelectedItem)
{
case Setup.None:
Setup = Setup.None;
break;
case Setup.OpenRange:
Setup = Setup.OpenRange;
break;
case Setup.SuperTrend:
Setup = Setup.SuperTrend;
break;
case Setup.LineBreak:
Setup = Setup.LineBreak;
break;
case Setup.LevelBounce:
Setup = Setup.LevelBounce;
break;
}
}
private void SpBtnSaveTemplate_Click(object sender, RoutedEventArgs e)
{
using (StreamWriter file = File.CreateText("xxx"))
{
JsonSerializer serializer = new JsonSerializer()
{
Formatting = Formatting.Indented,
PreserveReferencesHandling = PreserveReferencesHandling.Objects
};
serializer.Serialize(file, this);
}
}
private void SpBtnLoadTemplate_Click(object sender, RoutedEventArgs e)
{
var jsonSettings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects };
var obj = JsonConvert.DeserializeObject<SidiSystemBase>(File.ReadAllText("xxx"), jsonSettings);
}
private void SetSelectedSetup()
{
**if (spCbSetup == null)
{
return; // here there is the NULL reference and the code is therefore canceled
}**
switch (Setup)
{
case Setup.None:
spCbSetup.SelectedItem = Setup.None;
break;
case Setup.OpenRange:
spCbSetup.SelectedItem = Setup.OpenRange;
break;
case Setup.SuperTrend:
spCbSetup.SelectedItem = Setup.SuperTrend;
break;
case Setup.LineBreak:
spCbSetup.SelectedItem = Setup.LineBreak;
break;
case Setup.LevelBounce:
spCbSetup.SelectedItem = Setup.LevelBounce;
break;
}
}
[JsonProperty, JsonConverter(typeof(StringEnumConverter))]
public Setup Setup
{
get
{
return setup;
}
set
{
if (value != setup)
{
setup = value;
SetSelectedSetup();
}
}
}
}
}
有人可以告诉我如何在反序列化后通过属性(设置)自动更新组合框吗?信息,我是编程的新手;-)