C#从设置文件中读取自定义类型

时间:2013-11-22 10:41:52

标签: c#

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

我可以在设置文件中看到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"); }
    }

** * * 编辑 * ** < EM> * **

下面是我将对象保存到设置文件的位置 - 这确实有效。

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>

1 个答案:

答案 0 :(得分:0)

当我们更改用户范围设置时,新值将在应用程序会话期间保持不变。您可以在设置值后调用Settings.Save方法,在应用程序会话之间保留对用户设置的更改。