2010-08-17 53 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