这真的属于@ user18925 38
取正被串行化并以列表(List<Desk>
)由WCF返回的类型,敷在另一种类型的,例如:
[DataContract]
public class retDesks { [DataMember] public List<Desk> destinations; }
现在WCF返回所需的名称:
{“destinations”: [{“ID”:1,“destinationName”:“reject”,“status”:“FULL”},{“ID”:2, “destinationName”:“StevesDesk”,“status “:”OK“}]}
但是您还会注意到Json Desk
对象现在还包含属性ID
。由于ID
未被[DataMember]
修饰,所以ID
被输出中的Desk
的定义隐藏起来。
然而,Desk
上的装饰并不重要,因为整个Desk
类型在retDesks
有[DataMember] List<Desk>
的情况下被暴露。
那么你如何处理? 最喜欢快速的建议,使用LINQ筛选出List<Desks>
的属性,如:
var d1 = _desks.Select(e => new { e.destinationName, e.status });
坏消息这里是d1
是一个匿名类型的列表。 这是包含List<Desks>
的retDesks
类型的定义所不能接受的。
因此...创建第三个类型public deskRet [ public string destinationName; public string status; }
并将此类型设置为Linq输出和返回类型retDesks
的实例之间的列表。
public class Desk { public int ID; public string destinationName; public string status; }
public class retDesks { [DataMember] public List<deskRet> destinations; }
public class deskRet { public string destinationName; public string status; }
...
List<deskRet> d1 = _desks.Select(e =>
new deskRet{ destinationName=e.destinationName, status=e.status }
).ToList<deskRet>(); // maybe I'm working to hard to guarantee the type. But I'm okay with that
return(new retDesks{ destinations=d1 };
在你有spec'ed输出的一天结束:
{ “目的地”:[{ “destinationName”: “拒绝”, “状态”: “FULL”} { “destinationName”: “StevesDesk”, “状态”: “OK”}]}
不过下次考虑像Json.NET第三方框架。或者,也许只有使用.Net WCF框架的定制Json串行器。
标题与您的问题有何关系? – wkl
你对问题的名称是正确的。我现在就解决这个问题。不知道从哪里来。谢谢。 – Steve
@愿意不需要手工编辑。 '[{“Name”:“reject”,“status”:“FULL”},{“Name”:“returns”,“status”:“OK”}]'是WCF返回的字符串。逐字节。但问题是没有包含列表的名称。 – Steve