C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C# – 设计问题建议:那么不能使用字典么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要通过Web服务返回一个Dictionary(或一些List,我只是不知道),特别是通过WCF数据服务.看起来WCF数据服务不支持字典类型.

通过Web服务看起来像这样

<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 
- <employees xmlns="http://scheR_689_11845@as.microsoft.com/ado/2007/08/dataservices">
    <element>employee1,True</element> 
    <element>employee2,@R_489_11372@se</element>
    <element>employee3,True</element>
  </employees>

我首先尝试了一个1维数组,这似乎工作,但当然只带来3个elemet数字的1维数组:

[WebGet]
public String[] employees()
{
   return new[]
   {
        "employee1","employee2","employee3"
   };
}

基本上,我需要一些List(?),每个都有两个参数,即employeename一个BooleAnn值,IsActive.

任何建议将不胜感激.

更新:我在Web服务中添加了以下内容

public class employee
    {
        public String Name{ get; set; }
        public bool IsActive{ get; set; }

        public employee(String name,bool isActivE)
        {
            Name = name;
            IsActive = isActive;
        }
    }

[WebGet]
        public List<employee> employees()
        {
            var emp1 = new employee("Test1",truE);
            var emp2 = new employee("Test2",truE);
            var list = new List<employee> { emp1,emp2 };
            return list;
        }

当像我的网络浏览器中的.svc文件一样,我在加载时得到这个:

request Error

The server encountered an error processing the request. The exception message is 'Unable to load Metadata for return type 'System.Collections.Generic.List`1[Web.employee]' of method 'System.Collections.Generic.List`1[.Web.employee] employees()'.'. See server logs for more details. The exception stack trace is: 

at System.Data.services.Providers.baseserviceProvider.AddserviceOperation(MethodInfo method,String protocolMethod) at System.Data.services.Providers.baseserviceProvider.AddoperationsFromType(Type typE) at System.Data.services.Dataservice`1.CreateProvider() at System.Data.services.Dataservice`1.Handlerequest() at System.Data.services.Dataservice`1.ProcessrequestFormessage(Stream messageBody) at SyncInvokeProcessrequestFormessage(Object,Object[],Object[] ) at System.serviceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance,Object[] inputs,Object[]& outputs) at System.serviceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(messageRpc& rpC) at System.serviceModel.Dispatcher.ImmutableDispatchRuntime.Processmessage5(messageRpc& rpC) at System.serviceModel.Dispatcher.ImmutableDispatchRuntime.Processmessage41(messageRpc& rpC) at System.serviceModel.Dispatcher.ImmutableDispatchRuntime.Processmessage4(messageRpc& rpC) at System.serviceModel.Dispatcher.ImmutableDispatchRuntime.Processmessage31(messageRpc& rpC) at System.serviceModel.Dispatcher.ImmutableDispatchRuntime.Processmessage3(messageRpc& rpC) at System.serviceModel.Dispatcher.ImmutableDispatchRuntime.Processmessage2(messageRpc& rpC) at System.serviceModel.Dispatcher.ImmutableDispatchRuntime.Processmessage11(messageRpc& rpC) at System.serviceModel.Dispatcher.ImmutableDispatchRuntime.Processmessage1(messageRpc& rpC) at System.serviceModel.Dispatcher.messageRpC.Process(Boolean isOperationContextSet)

有任何想法吗?

更新2:

以下是有关Dataservice.svc类的更多信息.我在.NET 4.0框架中使用WCF数据服务的V2:

public class WebDataservice : Dataservice<MymodelEntities>
    {
        public static void Initializeservice(DataserviceConfiguration config)
        {
            config.UseVerboseErrors = true;
            config.SetserviceOperationAccessRule("*",serviceOperationRights.All);
            config.SetEntitySetAccessRule("*",EntitySetrights.AllRead | EntitySetrights.AllWritE);
            config.DataserviceBehavior.MaxProtocolVersion = DataserviceProtocolVersion.V2;
        }

解决方法

为什么不创建一个用户定义的数据类型,其中包含两个属性:字符串和布尔值?

public class MySillyWCFObject
{ 
 Boolean b;
 String name;

 public MySillyWCFObject(Boolean b,String s)
  {
   this.b = b;
   this.name = s;
  }
}

然后你可以说:

@H_750_9@mySillyWCFObject m = new MySillyWCFObject(true,"Hi");

大佬总结

以上是大佬教程为你收集整理的C# – 设计问题建议:那么不能使用字典么?全部内容,希望文章能够帮你解决C# – 设计问题建议:那么不能使用字典么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。