2012-01-31 91 views
0

我正在使用沒有屬性的子類型,以便在以特定方式使用對象時將順暢的驗證規則放置在對象上。將子類型作爲基類/父類型進行序列化

所以

public class User 
{ 
    public string name {get;set;} 
} 

public class myUser : User{} 

然而,當對象獲取到我的串行器,我希望它是序列化的基本類型。所以'用戶'是不是'myUser'的根元素。

+1

我不明白。繼承基類型所有成員的類型如何幫助您使用流暢的驗證規則? – svick 2012-01-31 12:36:25

+1

http://stackoverflow.com/questions/9068134/controller-input-validation-in-mvc-api/9068366#9068366 – Jules 2012-01-31 12:48:25

+1

但是,這並沒有說什麼繼承。實際上,如果'User'是具有所有屬性的類型,那麼'myUser'對於這種驗證無用,因爲基類型的成員不能在派生類型中移除。 'myUser'服務的目的不能僅僅通過使用'User'來實現? – svick 2012-01-31 13:00:41

回答

1

爲什麼在序列化之前不簡單地將其轉換回用戶?

在做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",不知道這是否會導致你的反序列化過程中存在問題。

+1

我試過了。它不起作用,實例仍然是一個子類型。 – Jules 2012-01-31 12:33:39

+0

這很有趣,我很抱歉給出了不正確的答案。期待有關這方面的正確答案。 – 2012-01-31 12:40:31

+0

更新我的答案與實際可能的工作。 :) – 2012-01-31 12:50:41

相關問題