2010-08-17 64 views
0

我有一個類型MyParameter我作爲參數傳遞給WCF服務WCF序列化問題

[Serializable] 
public class MyParameter : IXmlSerializable 
{ 
    public string Name { get; set; } 
    public string Value { get; set; } 
    public string Mytype { get; set; } 

    #region IXmlSerializable Members 

    public System.Xml.Schema.XmlSchema GetSchema() 
    { 
     return null; 
    } 

    public void ReadXml(System.Xml.XmlReader reader) 
    { 
     XElement e = XElement.Parse(reader.ReadOuterXml()); 
     IEnumerable<XElement> i = e.Elements(); 
     List<XElement> l = new List<XElement>(i); 
     Name = l[0].Name.ToString(); 
     Value = l[0].Value.ToString(); 
     Mytype = l[0].Attribute("type").Value.ToString(); 
    } 

    public void WriteXml(System.Xml.XmlWriter writer) 
    { 
     writer.WriteStartElement(Name); 
     writer.WriteAttributeString("xsi:type", Mytype); 
     writer.WriteValue(Value); 
     writer.WriteEndElement(); 
    } 

    #endregion 
} 

服務合同是這樣的:

[ServiceContract] 
public interface IOperation 
{ 
[OperationContract] 
void Operation(List<Data> list); 
} 

如果數據定義數據合同

[DataContract] 
public class Data 
{ 
public string Name { get; set; } 
public List<MyParameter> Parameters{ get; set; } 
} 

當我運行服務並測試它時 我在readXml MyParameter中遇到了異常 「前綴XSI沒有定義」 XSI應該定義命名空間「http://w3.org/2001/xmlschema-instance

我該如何解決這個問題

我很新的這這樣一個示例代碼將是非常非常非常有幫助 感謝

+0

你爲什麼不解釋一下你想要完成的任務?自定義序列化?或者你只是想發送一個自定義類型的列表? – Nix 2010-08-17 12:50:34

回答

0

地址:

writer.WriteAttributeString("xmlns","xsi", null,@"http://w3.org/2001/xmlschema-instance"); 
+0

感謝您的回覆 第一種方法的工作原理,但它不適用於我 我該如何做seconed方法? 我不明白要改變什麼? – asdas 2010-08-17 12:36:00

+0

爲什麼第一個不適合? – Nix 2010-08-17 12:40:26

+0

它導致代碼中的問題(與wcf不相關) – asdas 2010-08-17 12:41:26