我有兩個類,它們傳遞給序列化方法,我想在Serialization方法中訪問這些類的兩個屬性。問題是Serialization方法參數是作爲泛型傳遞的,我不知道如何在這種情況下訪問傳遞類的屬性。下面的例子。作爲泛型傳遞的訪問類屬性
public class MyClass1
{
public string MyProperty1 { get; set; }
//These properties are shared in both classes
public bool Result { get; set; }
public string EngineErrorMessage { get; set; }
}
public class MyClass2
{
public string MyProperty2 { get; set; }
//These properties are shared in both classes
public bool Result { get; set; }
public string EngineErrorMessage { get; set; }
}
//The method is used to serialize classes above, classes are passed as generic types
public void Serialization<T>(ref T engine)
{
try
{
//Do some work with passed class
}
catch (Exception e)
{
//If Exception occurs I would like to write values to passed class properties, how to do that?
Result = false;
EngineErrorMessage = e.Message;
}
}
全部方法的代碼
public void Submit<T>(ref T engine)
{
try
{
var workingDir = Path.Combine(Settings.FileStoragePath, Helpers.GetRandomInt(9).ToString());
Directory.CreateDirectory(workingDir);
var inputFile = Path.Combine(workingDir, Settings.InFileName);
var outputFile = Path.Combine(workingDir, Settings.OutFileName);
var deleteFile = Path.Combine(workingDir, Settings.DelFileName);
try
{
using (var stream = new FileStream(inputFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
Serializer.Serialize(stream, engine);
}
CheckStatus(outputFile);
using (var stream = new FileStream(outputFile, FileMode.Open, FileAccess.Read, FileShare.None))
{
engine = Serializer.Deserialize<T>(stream);
}
}
finally
{
File.Create(deleteFile).Dispose();
}
}
catch (Exception e)
{
//ToDo: Not implemented yet.
/* Result = false;
ErrorMessage = e.Message;*/
}
}
順便說一句,這似乎不太可能,你需要用'參考一個序列化類的方法...是否有一個特定的原因呢? –
我是C#的新手,使用你的序列化庫,我使用序列化和desiarialiaztion在一個方法。上面的代碼不是全部。所以爲了desializate並將值返回給類,我把它作爲參考。此外,如果我不會傳遞類作爲參考,我將無法分配這些類的Result和EngineErrorMessage屬性。對? – Tomas
@Tomas即使沒有'ref',你仍然在傳遞實例的引用(因爲它是一個類),所以'.Result'和'EngineErrorMessage'仍然可以正常工作;真正的問題是您是否需要*爲參數分配一個新的對象*並讓調用者注意到重新分配*。然而,在大多數情況下,返回這樣一個值比較好,例如'void Serialize(T)'和'T Deserialize()'。 –