我想通过WCF服务将类传递给客户端。在那个班级我使用一个结构。但我在客户端收到的值是:“System.Data.DataSet” 一定是我不懂的东西。 看我的结构(现在只是一个字符串)
namespace spine.datatypes
{
[Serializable]
public struct Tanga : IXmlSerializable
{
private string _value;
public Tanga(string value)
{
this._value = value;
}
public static implicit operator Tanga(string value)
{
return new Tanga(value);
}
public override string ToString()
{
return this._value;
}
// implement IXmlSerializable
public XmlSchema GetSchema() { return null; }
public void ReadXml(XmlReader reader)
{
_value = reader.ReadContentAsString();
}
public void WriteXml(XmlWriter writer)
{
writer.WriteValue(this._value.ToString());
}
}
}
这是我的服务:
namespace webapplication.WCFservice.Recorder
{
[ServiceContract]
[XmlSerializerFormat]
public interface IWCFRecorder
{
[OperationContract]
TvRecorder getDedicatedJob(String recordername, String recorderip);
}
}
这是我通过的课程:
namespace spine.recorder.tv
{
[Serializable()]
[XmlRoot("Recorder")]
public class TvRecorder
{
public int id { get; set; }
public Tanga name { get; set; }
public MyIpAddress ip { get; set; }
public int channel { get; set; }
public MyTimecode time_start { get; set; }
public MyTimecode duration { get; set; }
public TvRecorder() { }
public TvRecorder(int _id, Tanga _name, MyIpAddress _ip, int _channel, MyTimecode _time_start, MyTimecode _duration)
{
this.id = _id;
this.name = _name;
this.ip = _ip;
this.channel = _channel;
this.time_start = _time_start;
this.duration = _duration;
}
}
}
答案 0 :(得分:1)
不幸的是,svcutil为同一模式类型生成DataContract类型和XmlSerializer类型。我建议你尝试使用额外的“/ serializer:XmlSerializer / useSerializerForFaults”切换到svcutil,看看是否能解决你的问题。它应该确保Tanga生成。
通常,对于生成DataContract类型的模式导入,模式中定义的所有类型必须包含在DCS支持的XSD子集中,您可以在此处找到:
http://msdn.microsoft.com/en-us/library/ms733112.aspx
如果指定“/ serializer:DataContractSerializer”时svcutil无法生成代理,那么最可能的解释是架构不符合DC。使用svcutil时是否看到任何其他错误或警告?
在公共Web服务中使用DataSet(类型化和非类型化)和IXmlSerializables通常也是不好的做法。在这种情况下,似乎可能难以导入这些。以下是一些快速链接,其中包含其他一些原因:http://www.hanselman.com/blog/PermaLink,guid,d88f7539-10d8-4697-8c6e-1badb08bb3f5.aspx
虽然DataContractSerializer可以序列化IXmlSerializable类型,但根本无法保证IXmlSerializable类型可以作为数据契约导入。这是两个不同的概念。 IXmlSerializable类型可以自由地提供它们自己的模式,因此它们可以提供不符合datacontract的模式,从而导致svcutil回退到XmlSerializer类型生成。
希望这有帮助。