2013-11-22 89 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