【问题标题】:Setting properties for object only when present in database仅当存在于数据库中时才为对象设置属性
【发布时间】:2019-12-10 10:43:10
【问题描述】:

我有一个对象应该用这些值来描述一些客户:

{
    public class CustomerDescription
    {
        public string FirstName { get; set; } = "";
        public string LastName { get; set; } = "";
        public string StreetName { get; set; } = "";
        public string HouseNumber { get; set; } = "";
        public string PostalPlace { get; set; } = "";
        public string PostCode { get; set; } = "";
        public string CountryCode { get; set; } = "";
        public string EMail { get; set; } = "";
        public string PhoneNumber { get; set; } = "";
    }
}

这些值是从客户数据库中检索出来的,并将用于创建一个 XML 文件,该文件将通过 SOAP 发送到另一个数据库。但是,并非所有这些值都始终存在。例如,一位客户可能在数据库中没有国家代码。在这种情况下,我不想在我发送的 XML 文件中包含这个值。下面是我如何创建 XML 元素的示例:

new XElement("address",
           new XElement("address1", CustomerDescription.StreetName + " " + cabCustomerDescription.HouseNumber),
           new XElement("postalCode", cUstomerDescription.PostCode),
           new XElement("city", customerDescription.PostalPlace),
           new XElement("countryCode", customerDescription.CountryCode))
)

这是针对 CustomerDescription 中的所有属性完成的。我的问题是,我怎样才能做到这一点,如果数据库中不存在一个值,那么这个值不包含在 XML 文件中?我不希望它是空的,比如<countryCode></countryCode>,而是根本不存在。

【问题讨论】:

  • 您为什么要尝试手动创建 SOAP 有效负载,而不是简单地创建和使用服务代理? SOAP 适用于具有非常具体、定义良好(实际上是标准化)形式的 XML 请求。不是 XML 文件
  • 在 Visual Studio 中,您可以通过右键单击 References 创建代理,选择 Add Service Reference 并将 URL 添加到 SOAP 服务的 WSDL
  • 我第一次使用 WCF 客户端时遇到了将客户端证书附加到我正在创建的客户端的问题。在无法解决这个问题大约 2 周后(我也在 stackoverflow 上发布了几次)我决定暂时这样做。
  • 那么现在您要重新实现 WCF 了吗? WCF 工作 - 自 2008 年以来。HTTPS 开箱即用。 WS-Security 有效。签约作品。如果您之前的问题没有得到答案,可能是因为它们太模糊或不清楚。您不需要编写大量代码来使用证书。如果您只需要使用 HTTPS,您实际上不必编写任何代码。只需使用不同的绑定在配置中
  • 您可能也应该使用 .NET Framework 创建一个代理,然后尝试简单地复制代码。大多数问题是由代理生成器引起的。生成的代码使用或多或少可用的类。您可能必须使用CustomBinding 而不是WSHttpBinding。您还可以在 .NET Framework 库中创建代理,然后添加对该库的引用。 .NET Core 会发出警告,但只要您的代码在 Windows 上运行,您就可以忽略它们。我以这种方式在 .NET Core 应用程序中使用AlphaFS

标签: c# xml xelement


【解决方案1】:

如果数据库中的值为 null 且不包含在 x 元素中,则只需使用三元运算符即可。

例如:我明确地将 StreetName 设为 null 并检查是否为 null 然后不添加到 xml 文件中。

CustomerDescription t = new CustomerDescription();
 t.StreetName = null;
            var abc = new XElement("address", t.StreetName != null ? new XElement("address1", t.StreetName + " " + t.HouseNumber) : null,
            new XElement("postalCode", t.PostCode),
            new XElement("city", t.PostalPlace),
            new XElement("countryCode", t.CountryCode));

【讨论】:

    猜你喜欢
    • 2021-02-25
    • 1970-01-01
    • 2012-03-10
    • 2016-08-29
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    相关资源
    最近更新 更多