DataContractSerializer的不是WCF的一部分,它是運行系列化這WCF依賴的一部分。
我在過去曾使用DataContractSerializer反序列化XML中的對象,我已經生成了一個xml轉換。這可能是你想要做的事。
爲了弄清楚串行器所需的XML,我發現編寫一小段代碼可以更容易地將我的對象序列化爲一個字符串,以查看它應該如何結構化以及XML名稱空間是什麼。
[TestFixture]
public class TestDataContractSerializerOutput
{
[Test]
public void Should_give_me_some_serialized_xml()
{
Foo foo = new Foo();
foo.Bars.Add(new Bar { Name = "Wibble"});
var dataContractSerializer = new DataContractSerializer(typeof(Foo), new[] { typeof(Bar) });
using (Stream stream = new MemoryStream())
{
dataContractSerializer.WriteObject(stream, foo);
stream.Position = 0;
using (StreamReader streamReader = new StreamReader(stream))
{
Trace.WriteLine(streamReader.ReadToEnd());
}
}
}
}
[DataContract]
public class Foo
{
public Foo()
{
Bars = new List<IBar>();
}
[DataMember]
public IList<IBar> Bars { get; set; }
}
public interface IBar
{
string Name { get; set; }
}
[DataContract]
public class Bar : IBar
{
public string Name { get; set; }
}
有了這些信息,您可以看到如何構建XML,並且您還可以獲取xml模式以進行額外驗證。
對,這就是我正在做的事情。但僅僅通過查看結果輸出,我無法知道我需要遵循的*約束條件。例如,我可能會在XML中看到' ',但這是否意味着' '也會起作用?我在這個問題中列出了其他例子。 –
2010-09-22 14:25:25
不幸的是,我已經改變了工作,所以我不能看我以前做過的代碼,但我確實記得,只要它很好地形成,它就相當有利。我建議的是,您從VisualStudio(C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Xml \ Schemas)中的模式文件夾中獲取所需模式: – Bronumski 2010-09-22 15:17:09
實際上,命名空間http://模式。microsoft.com/2003/10/Serialization/Arrays不在那裏,現在就響個不停。我認爲我所做的只是爲真正複雜的場景創建了許多單元測試,並確保它們能夠正常工作。隨着您的對象圖變化,只需讓您的測試保持最新狀態。 – Bronumski 2010-09-22 15:27:31