使用泛型类型构建WCF

时间:2012-05-11 08:34:13

标签: c# wcf generics

我想构建一个服务,将数据从数据库读取到JSON格式的客户端。我不知道架构表和类型。

我考虑过在字典上实现WCF但是JSON非常复杂并且包含像“key = ...; value = ...”之类的对象,而我只想要“key = value”而我需要返回列表字典对象。有时从数据库我将收到一个逗号分隔数组,所以我将在我的字典中插入一个新的字典作为值的键。

在PHP中,我的老板说它可以通过关联数组完成。请帮我一些想法或链接,因为我不知道从哪里开始看。

如果您有什么不明白的地方请发表评论,我会尝试其他解释。

编辑:

  1. 我需要它作为休息服务,所以JSON是强制性的。
  2. 如何从表中加载数据?我可以使用哪种类型?
  3. 编辑#2:这就是我想要的:CorectJSON

    编辑#3:这是我现在的json:

    stdClass Object
    (
        [areaGetStreetTypesResult] => stdClass Object
            (
                [responseMessage] => [{"name":"IMPASSE","street_type":"IMP"}{"name":"LOTISSEMENT","street_type":"LOT"}{"name":"ROUTE","street_type":"RTE"}{"name":"RUE","street_type":"RUE"}]
                [response_status] => stdClass Object
                    (
                        [message] => Success : JSON created into the responseMessage variable !
                        [status] => 0
                    )
    
            )
    
    )
    

    之间不包含一些逗号,因此无法通过php解码。我该怎么办?

    这是我的方法Code

3 个答案:

答案 0 :(得分:2)

我认为在webservice API中作为字典做一切都是不好的做法,我讨厌在需要使用这样的API时。如果它是WCF,它会生成WSDL,WDSL描述数据进出,所以如果一切都是字典,WSDL就无法提供任何有意义的内容,因此您的数据交换不会告诉您任何数据。
如果您只需要通过webservice转发数据库数据,WCF就有DataServices http://msdn.microsoft.com/en-us/data/bb931106,尽管我认为您应该创建适合您业务需求的API,而不是数据库和客户端之间的简单代理。

答案 1 :(得分:1)

您需要传递JSON的原因是什么?如果要创建WCF REST服务,告诉WCF创建JSON消息就足够了,如下所述:http://www.codeproject.com/Articles/327420/WCF-REST-Service-with-JSON

如果您从C#应用程序访问该服务,则无需关心数据的来回传递方式。只需采取正常的"方法参数和使用返回值,就像您在本地进行并重新设置一样。

示例:

string[] GetResultStrings(List<Rectangle> sourceRectangles);

如果你真的需要传递JSON字符串,只需传递字符串并使用JSON序列化器和反序列化器来编码回复并解码参数。

例如:

string GetJSONString(string jsonRequest);

以下信息可能有助于您使用JSON序列化程序和反序列化程序:http://www.codeproject.com/Articles/272335/JSON-Serialization-and-Deserialization-in-ASP-NET

修改
我使用以下方法将可序列化对象序列化为JSON:

public static string SerializeJSON(this object obj)
{
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
    using (MemoryStream ms = new MemoryStream())
    {
        serializer.WriteObject(ms, obj);
        return Encoding.UTF8.GetString(ms.ToArray());
    }
}

这适用于任何DataContract类,例如:

[DataContract]
public class MyJSONReturnableClass
{
    [DataMember]
    public string ThisBecomesANamedString;

    [DataMember]
    public MyJSONReturnableClass[] AndWorksAlsoForNestedArrays;
}

答案 2 :(得分:1)

填充字典,然后使用JSon将其序列化。 使用WCF或RabbitMq将其传递给您的客户端......

JsonConvert.SerializeObject(yourDict);

下载NewtonSoft.dll

使用:

using Newtonsoft.Json;