我有一個應用程序使用XML和自定義序列化程序,並且最近添加了一些使用Unity 1.2的DI在我的類中設置兩個屬性。序列化順序和Unity問題
現在,當我序列化該類時,由Unity設置的屬性首先被序列化,然後依次爲所有其他屬性。
所以,如果類的屬性2和3是由統一設置序列化類出來,在下面orger:23145
對於XmlSerialiser我可以使用的XmlElement屬性來設置的順序,但我自定義的串行器仍以錯誤的順序輸出類,並且以固定的長度格式輸出,因此順序很重要。
是否有人知道一種方法讓我的課順序序列,而仍然使用統一?
感謝
代碼示例 類
[Serializable]
[DataContract]
[XmlInclude(typeof(HeaderDocument))]
public class HeaderDocument
{
[InjectionConstructor]
public HeaderDocument()
{
DateTimeCreated = DateTime.Now;
TransactionId = Guid.NewGuid().ToString();
HasPayload = true;
}
/// <summary>Gets or sets the service name of the target service.</summary>
[DataMember, CopyBookElement("REQUESTED-SERVICE", CopyBookDataType.String, Length = 40)]
public string ServiceName { get; set; }
/// <summary>Gets or sets the entry application name of the request.</summary>
[DataMember, CopyBookElement("CONSUMER-APPLICATION-ID", CopyBookDataType.UnsignedInteger, Length = 3)]
public int ApplicationId { get; set; }
/// <summary>Gets or sets the quality of service required for the request.</summary>
[DataMember, CopyBookElement("QUALITY-OF-SERVICE", CopyBookDataType.String, Length = 1)]
public string QualityOfService { get; set; }
/// <summary>Gets or sets the transaction identifier.</summary>
[DataMember, CopyBookElement("TRANSACTION-ID", CopyBookDataType.String, Length = 36)]
public string TransactionId { get; set; }
/// <summary>Gets or sets the time the document was created.</summary>
public DateTime DateTimeCreated { get; set; }
[DataMember, CopyBookElement("HAS-PAYLOAD", CopyBookDataType.Boolean)]
public bool HasPayload { get; set; }
}
統一配置
<unity>
<typeAliases />
<containers>
<container name="TechnicalArchitecture">
<types>
<type type="ILogger, ApplicationServices" mapTo="Logger, ApplicationServices" />
<type type="HeaderDocument, ApplicationServices">
<typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
<property name="ApplicationId" propertyType="System.Int32">
<value value="19" />
</property>
<property name="QualityOfService" propertyType="System.String">
<value value="1" />
</property>
</typeConfig>
</type>
</types>
</container>
</containers>
當構建HeaderDocument我打電話
HeaderDocument = IOC.Container.Resolve<HeaderDocument>();
我不希望修改自定義serilaiser,目前我剛剛將屬性1添加到Unity配置,因此我可以做一些測試。
但我真正想知道的是,爲什麼由Unity填充的屬性與通過任何其他方法設置的屬性的處理方式不同。 (反射,構造器或屬性設置器)。
嗨,代碼樣本的任何機會/片段?我認爲你設置的屬性是簡單的類型 - 如字符串或數字 - 不參考其他對象... – 2009-01-07 07:14:30