2013-11-22 38 views
0

我在.NET 4.0中有一个C#应用程序。我有一个名为OrderBlock的自定义对象。此自定义对象包含一些属性和一个包含另一个名为Order的自定义对象的列表。当应用程序运行时,它将OrderBlock对象保存到我的设置文件中。C#从设置文件中读取自定义类型

我可以在设置文件中看到OrderBlock已经正确保存了属性&订单列表。我遇到的问题是我下次运行应用程序并尝试读取OrderBlock对象不起作用。它只是返回null。

_orderBlockEntity = Properties.Settings.Default.MyOrderBlock; 

其他设置我可以通过使用类似于上面一行的一行来读取更好的设置。然而,OrderBlock对象是我在设置文件中使用的唯一自定义类型。

OrderBlock & Order对象包含带有XmlElement属性的属性,该属性将属性重命名为另一个名称,这用于发送xml消息时 - 不知道这是否是问题?

[XmlElement("tF_Transactions")] 
    public List<Order> Orders 
    { 
     get { return _orders; } 
     set { _orders = value; OnPropertyChanged("Orders"); } 
    } 

** * *编辑* ** * **

下面是我我的对象保存到设置文件 - 它确实工作。

Properties.Settings.Default.MyOrderBlock = _orderBlock; 
Properties.Settings.Default.Save(); 

Designer中的代码如下。

[global::System.Configuration.UserScopedSettingAttribute()] 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
    public global::FC.OMS.TF.Entities.OrderBlock MyOrderBlock { 
     get { 
      return ((global::FC.OMS.TF.Entities.OrderBlock)(this["MyOrderBlock"])); 
     } 
     set { 
      this["MyOrderBlock"] = value; 
     } 
    } 

下面是我的设置文件snipet - 其余的只是更多的订单。下面显示的其他设置工作正常,在重新启动我的应用程序后,可以读取它们的值。以下所有设置的范围是用户。

 <setting name="LastFileDateTime" serializeAs="String"> 
      <value>11/22/2013 09:01:29</value> 
     </setting> 
     <setting name="MessageSent" serializeAs="String"> 
      <value>True</value> 
     </setting> 
     <setting name="MessageRecieved" serializeAs="String"> 
      <value>True</value> 
     </setting> 
<setting name="MyOrderBlock" serializeAs="Xml"> 
      <value>      
        <SystemSettings> 
         <sCode>Key</sCode> 
         <sValue>msawyer131122090129848</sValue> 
        </SystemSettings> 
        <tF_Transactions> 
         <iId>17</iId> 
         <sSecurityId>GB0.144</sSecurityId> 
         <sPortfolio>OEE285</sPortfolio> 
         <sBuySell>B</sBuySell> 
         <sBuyCurrency>GBP</sBuyCurrency> 
         <sCostCurrency>GBP</sCostCurrency> 
         <iTransactionType>0</iTransactionType> 
         <dfBuyAmount>32000</dfBuyAmount> 
         <dfCostAmount xsi:nil="true" /> 
         <dtDealDate>2013-11-22T09:01:29.8406559Z</dtDealDate> 
         <dtStartDate xsi:nil="true" /> 
         <dtEndDate xsi:nil="true" /> 
         <sUser>msawyer</sUser> 
         <sReason>FICLIENT</sReason> 
         <iStatus>0</iStatus> 
         <sComments>Bulk upload by msawyer at 22/11/2013 09:01:29</sComments> 
         <bGenerateDescription>true</bGenerateDescription> 
         <sDealer>msawyer</sDealer> 
        </tF_Transactions> 
        <tF_Transactions> 
         <iId>16</iId> 
         <sSecurityId>GB1.232</sSecurityId> 
         <sPortfolio>OEE285</sPortfolio> 
         <sBuySell>B</sBuySell> 
         <sBuyCurrency>GBP</sBuyCurrency> 
         <sCostCurrency>GBP</sCostCurrency> 
         <iTransactionType>0</iTransactionType> 
         <dfBuyAmount>30000</dfBuyAmount> 
         <dfCostAmount xsi:nil="true" /> 
         <dtDealDate>2013-11-22T09:01:29.8396794Z</dtDealDate> 
         <dtStartDate xsi:nil="true" /> 
         <dtEndDate xsi:nil="true" /> 
         <sUser>msawyer</sUser> 
         <sReason>FICLIENT</sReason> 
         <iStatus>0</iStatus> 
         <sComments>Bulk upload by msawyer at 22/11/2013 09:01:29</sComments> 
         <bGenerateDescription>true</bGenerateDescription> 
         <sDealer>msawyer</sDealer> 
        </tF_Transactions> 
+0

您能否显示保存OrderBlock的代码和设置文件的摘录,显示信息存储的实际xml? –

+0

@KaiHartmann我已经添加了我的设置文件的实际xml。 – mHelpMe

回答

0

当我们更改用户范围设置时,新值在应用程序会话的持续时间内一直存在。通过在设置值之后调用Settings.Save方法,您可以在应用程序会话之间持续更改用户设置。

+0

值正在持续存在,我可以正确看到它们。它刚刚打开我的应用程序时,它将不会读取我的自定义类型的设置文件中的值,它将用于其他类型,如datetime,bool等 – mHelpMe

+0

请检查此链接http://stackoverflow.com/问题/ 7681957 /故障保存 - 应用程序设置中的对象集合它与您的问题完全相同。 –

+0

但我看不出提供的解决方案以及我目前拥有的解决方案。我编辑了我的问题,以在设计师课程中显示代码。 – mHelpMe