我正在使用沒有屬性的子類型,以便在以特定方式使用對象時將順暢的驗證規則放置在對象上。將子類型作爲基類/父類型進行序列化
所以
public class User
{
public string name {get;set;}
}
public class myUser : User{}
然而,當對象獲取到我的串行器,我希望它是序列化的基本類型。所以'用戶'是不是'myUser'的根元素。
我正在使用沒有屬性的子類型,以便在以特定方式使用對象時將順暢的驗證規則放置在對象上。將子類型作爲基類/父類型進行序列化
所以
public class User
{
public string name {get;set;}
}
public class myUser : User{}
然而,當對象獲取到我的串行器,我希望它是序列化的基本類型。所以'用戶'是不是'myUser'的根元素。
爲什麼在序列化之前不簡單地將其轉換回用戶?
在做XmlSerializer的一些周圍挖掘後,這樣做對我來說:
var myUser = new myUser();
myUser.Name = "Test name";
var serializer = new XmlSerializer(typeof(User), new Type[] {myUser.GetType()});
serializer.Serialize(Console.Out, myUser);
這裏正在創造與基本型的XmlSerializer
要投射(在這種情況下用戶)進行進入,以及您想要允許的其他類型的數組。看起來,這些類型必須從基類型派生。
輸出:
<?xml version="1.0" encoding="ibm850"?>
<User xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org 2001/XMLSchema" xsi:type="myUser">
<Name>Test name</Name>
</User>
注xsi:type="myUser"
,不知道這是否會導致你的反序列化過程中存在問題。
我試過了。它不起作用,實例仍然是一個子類型。 – Jules 2012-01-31 12:33:39
這很有趣,我很抱歉給出了不正確的答案。期待有關這方面的正確答案。 – 2012-01-31 12:40:31
更新我的答案與實際可能的工作。 :) – 2012-01-31 12:50:41
我不明白。繼承基類型所有成員的類型如何幫助您使用流暢的驗證規則? – svick 2012-01-31 12:36:25
http://stackoverflow.com/questions/9068134/controller-input-validation-in-mvc-api/9068366#9068366 – Jules 2012-01-31 12:48:25
但是,這並沒有說什麼繼承。實際上,如果'User'是具有所有屬性的類型,那麼'myUser'對於這種驗證無用,因爲基類型的成員不能在派生類型中移除。 'myUser'服務的目的不能僅僅通過使用'User'來實現? – svick 2012-01-31 13:00:41