Web服务序列化问题

时间:2014-05-28 21:14:44

标签: c# web-services wcf

我有3个名为Result,Col和Tuple的类。它们实质上代表了序列化的数据库查询。这些是使用Web服务(System.Web.Services.WebService)公开的。然后,此Web服务由另一个操作数据的Web服务(System.ServiceModel.ServiceHost)使用。问题是第二个Web服务被另一个客户端使用,它无法读取任何数据。

以下是3个类别(删除了一点绒毛):

结果类

public class Result
{
    public List<Col> Columns { get; set; }
    public List<Tuple> Tuples { get; set; }
}

列类

public class Col
{
    public string ColumnName;
    public int? ColumnSequence;
    public string DataType;
    public int? DataLength;
    public int? DataPrecision;
    public int? DataScale;
    public bool? AllowDbNull;
    public bool? IsReadOnly;
    public bool? IsLong;
    public bool? IsKey;
    public string KeyType;
    public bool? IsUnique;
    public string Description;
}

元组

public class Tuple
{
    public List<object> Values = new List<object>();
}

公开功能

[WebMethod]
public Result Query(string sql, object[] arguments)
{
    using (var Conn = Utilities.GetConnection(true))
        return Conn.Query(sql, arguments);
}

为了更好的解释,我基本上在第二个Web服务中查询数据库;但是,我回收用于存储结果的数据结构。因此,当客户端查询第二个Web服务时,它只是给它填充数据结构并将其发送给调用客户端。

这是第二个网络服务:

[OperationContract]
public Result QuerySource(String companyCode, String commandText, params object [] arguments)
{
    using (var Connection = ClientSettings.Instance.GetOpenConnectionByCode(companyCode))
        return Connection.Query(commandText, arguments);
}

我使用了以下代码:

public static string ToXml(this Result result)
{
   using (var stringwriter = new StringWriter(CultureInfo.CurrentCulture))
   { 
        new XmlSerializer(result.GetType()).Serialize(stringwriter, result);
        return stringwriter.ToString();
   }
}

我得到了:

<?xml version="1.0" encoding="utf-16"?>
<Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Columns xmlns="http://pmh.plexxis.com">
    <Col>
      <ColumnName>DUMMY</ColumnName>
      <ColumnSequence xsi:nil="true" />
      <DataType>System.String</DataType>
      <DataLength xsi:nil="true" />
      <DataPrecision xsi:nil="true" />
      <DataScale xsi:nil="true" />
      <AllowDbNull xsi:nil="true" />
      <IsReadOnly>false</IsReadOnly>
      <IsLong>false</IsLong>
      <IsKey>false</IsKey>
      <IsUnique>false</IsUnique>
    </Col>
  </Columns>
  <Tuples xmlns="http://pmh.plexxis.com">
    <Tuple>
      <Values>
        <anyType xsi:type="xsd:string">X</anyType>
      </Values>
    </Tuple>
  </Tuples>
</Result>

我怀疑这与名称空间有关。任何帮助将不胜感激。

0 个答案:

没有答案