我想构建一个服务,将数据从数据库读取到JSON格式的客户端。我不知道架构表和类型。
我考虑过在字典上实现WCF但是JSON非常复杂并且包含像“key = ...; value = ...”之类的对象,而我只想要“key = value”而我需要返回列表字典对象。有时从数据库我将收到一个逗号分隔数组,所以我将在我的字典中插入一个新的字典作为值的键。
在PHP中,我的老板说它可以通过关联数组完成。请帮我一些想法或链接,因为我不知道从哪里开始看。
如果您有什么不明白的地方请发表评论,我会尝试其他解释。
编辑:
编辑#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
答案 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;