我正在使用ERP公司提供的Web服务(Infor的SyteLine 8 Web服务)。 该Web服务通过传递带有TableRow的DataTable的DataTable来使您将产品带到ERP系统。 传入的许多值都来自受限列表。

最初,我尝试通过对这些值使用Enums来解决受限列表的问题。 不幸的是,我需要使用Enums进行的许多操作都不适合Enums类型,因为它们具有“ KANBAN / JIT”或“ 040”之类的名称,这些名称在Enum中不起作用。

我尝试使用Enums的原因是因为我在代码中创建了一个POCO产品对象,该对象传递并分配值,然后将其平铺到DataTable中字符串的DataRow中,然后传递给Web服务。 这样,很容易确保我根据product.productionType = productionTypeEnum.KANBANJIT;这样的值来设置值product.productionType = productionTypeEnum.KANBANJIT;

除了使用枚举之外,还有什么其他选择,这样我就不会遇到问题了?

===============>>#1 票数:1 已采纳

您可以使用枚举,在将它们添加到DataRow之前,只需要一些方法即可将它们转换为字符串。 例如,可以将转换器实现为扩展方法:

using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;

public class Product
{
  public enum ProductionType
  {
    Unknown,
    KanbanJit,
    ZeroForty
  }

  private ProductionType type;

  public ProductionType Type
  {
    get { return this.type; }
    set { this.type = value; }
  }

  // ... other members of Product class ...
}

public static class ExtensionMethods
{
  public static string ToString(this Product.ProductionType productionType)
  {
    switch (productionType)
    {
      case Product.ProductionType.KanbanJit: return "KANBAN/JIT";
      case Product.ProductionType.ZeroForty: return "040";
      default: return string.Empty;
    }
  }
}

public class Program
{
  public static void Main()
  {
    // Create products, set their production type, and add them to a list
    var products = new List<Product>();
    products.Add(new Product() { Type = Product.ProductionType.KanbanJit });
    products.Add(new Product() { Type = Product.ProductionType.ZeroForty });

    // Convert the production types to string and add them to DataRow
    foreach (var product in products)
      AddProductionTypeToDataRow(product.Type.ToString());    
  }

  static void AddProductionTypeToDataRow(string productionType)
  {
    // ... implementation comes here ...
    Console.WriteLine(productionType);
  }
}

==更新==

这是另一个没有扩展方法的类型安全解决方案:

using System;
using System.Collections.Generic;

public class Product
{
  public sealed class ProductionType
  {
    private string name;
    private ProductionType(string name = null) { this.name = name; }
    public static implicit operator string(ProductionType type) { return type.name; }
    public static readonly ProductionType KanbanJit = new ProductionType("KANBAN/JIT");
    public static readonly ProductionType ZeroForty = new ProductionType("040");
    // ... other constants ...
    public static readonly ProductionType Unknown = new ProductionType();
  }

  private ProductionType type;

  public ProductionType Type
  {
    get { return this.type; }
    set { this.type = value; }
  }

  // ... other members of Product ...
}

public class Program
{
  public static void Main()
  {
    // Create products, set their production type, and add them to a list
    var products = new List<Product>();
    products.Add(new Product() { Type = Product.ProductionType.KanbanJit });
    products.Add(new Product() { Type = Product.ProductionType.ZeroForty });

    // Convert the production types to string and add them to DataRow
    foreach (var product in products)
      AddProductionTypeToDataRow(product.Type);    
  }

  static void AddProductionTypeToDataRow(string productionType)
  {
    // ... implementation comes here ...
    Console.WriteLine(productionType);
  }
}

  ask by Ben Hoffman translate from so

未解决问题?本站智能推荐:

1回复

如何将列表从另一个类传递给C#中的服务类

我有一个实现接口的Service类。 在此类中,我使用的是从excel加载的列表。 我必须在程序开始时仅加载一次列表。 因此,我在Console_Load处加载了List,并将该列表传递给Service Class并获得另一个List。 但是,这些值在IService成员内部变为空。
2回复

将单个枚举值传递给WCF服务时,protobuf-net引发有关无效线型的异常

在我的wcf服务上调用以下方法…。 导致以下异常… 注意:如果我删除第二个和第三个参数。 所以方法是 这很好。 参数字段是一个枚举列表,并且反序列化没有问题。 为什么单个枚举值会导致上述异常? 提前致谢。 供你参考... 编辑: 另
2回复

C#中的列表到列表转换

这个映射正确吗? 列表可以有多行 我很想知道列表中是否包含3行,并且所有3行都将被映射? 还是我们需要循环?
1回复

WCF替代方案,无需设置MaxReceivedMessageSize

我在WCF服务中遇到一个经典问题MaxReceivedMessageSize,但是根据99%的互联网建议设置此值对我来说不是一个选择。 该项目必须尽可能地安全,并且更改此属性,我们很容易受到DoS攻击。 今天,Web方法返回了大量特定对象的列表。 因此,我们正在考虑服务器是否可以发送多
2回复

SOA中转换层的替代方案:WCF

服务不是面向对象的。 假设我有一个基于OOAD的设计。 我们可以使用翻译层将其转换为DTO(没有任何行为)。 但这可能会导致代码量的大幅增加。 在WCF中有什么替代方案(通过C#)? 请评论在SOA和OOAD之间进行这样的转换是否是个好主意。 当我们拥有SOA或使用这种映射技术时
1回复

如何配置在web.config中作为服务属性值提供的类型?

我在web.config文件的<system.serviceModel>标记中配置了以下内容: 我的服务的XML是这样的: 我的应用程序在默认网站的应用程序池中运行,并且“ 启用32位应用程序”设置为True (因为该服务使用了一些旧的数据访问库)。 运行它时,
1回复

如何在不使用查询字符串的情况下使用WCF在UriTemplate中传递JSON字符串

我能够传递带有查询字符串的json字符串。 但是,当我想要传递不带查询字符串的传递时,出现错误。 当我通过URL上方时,出现错误“错误请求”。 我想不使用查询字符串就传递json字符串。 请提出如何实现。
1回复

如何将参数传递给svcutil

我正在尝试使用svcutil.exe从wcf服务生成代理文件,但是我不明白如何将参数传递给svcutil以将集合类型作为system.Collections.Generic.List 我在Visual Studio命令提示符中尝试了以下命令。 请使用以上命令纠正我。
1回复

将参数传递给WCF服务构造函数

我需要通过一个存在的DI容器作为参数传递给WCF服务的构造。为了做到这一点我使用IInstanceProvider WCF服务应在自主机托管。 我还实现了CustomServiceHost 和ServiceHostFactory } 我创建WCF服务: 我有
1回复

使用soap将字节数组传递给wcf

在这里,当我尝试发送字节数组时,它给了我错误的请求错误。 我已检查所有邮件限制的最大值。 全部设置为最大值。 但是我能够通过将字节数组参数保持为null来将字符串值发送到服务方法。 我不知道为什么会在这里发生。 我还检查了服务行为配置名称和绑定配置名称(即,包含的名称空间),似乎还不错