gpt4 book ai didi

wcf - 基于 WCF 中的接口(interface)序列化数组的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 18:40:24 26 4
gpt4 key购买 nike

首先是代码:

[ServiceContract]
public interface IWorker
{
[OperationContract]
void Process(XmlElement data);
[OperationContract]
void Update(Rule rule);
}

[DataContract]
public class Rule
{
[OperationContract]
public string Expression { get; set; }
[OperationContract]
public List<IAction> Actions { get; set; }
}

public interface IAction
{
void Execute(XmlElement data);
}

调度程序将数据编码为 xml 并将其发送到 IWorker 实例,在该实例中计算每个表达式。当 IWorker 实例将表达式计算为 true 时,将调用 IAction.Execute 并传递 xml/data。

序列化 Rule.Actions 的最佳方式是什么?我已经开始编写自定义序列化程序,但我更愿意看看是否有更简单的方法。

谢谢。

最佳答案

我不认为你可以在 DataContracts 中使用接口(interface)(如果我错了,有人纠正我,但我认为这就像尝试使用泛型一样)。我所做的是有一个父类,然后添加 KnownType属性。例如

[DataContract]
public class Action
{
//members and properties
}


[DataContract]
public class SomeOtherAction:Action
{
//more implimentation
}

[DataContract]
[KnownType(typeof(SomeOtherAction))]
public class Rule
{
[DataMember]
List<Action> Actions{get;set;}

}
现在,您可以将任何从父 Action 对象继承的对象填充到 Actions 列表中,并且它将正确序列化它们各自的所有类属性(只要该对象被列为 knowntype)。
*我以“Action”名称为例与您的名称相关,显然Action是.NET中的关键字

关于wcf - 基于 WCF 中的接口(interface)序列化数组的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6932356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com