C# 仅当对象存在于数据库中时才设置其属性

C# 仅当对象存在于数据库中时才设置其属性,c#,xml,xelement,C#,Xml,Xelement,我有一个对象,应该用这些值来描述某个客户: { public class CustomerDescription { public string FirstName { get; set; } = ""; public string LastName { get; set; } = ""; public string StreetName { get; set; } = ""; public string House

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

{
    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文件中?我不希望它是空的,比如
,而是根本不存在。

如果数据库中的值为null,则只需要使用三元运算符,而不包括在x元素中

明确地说,我做了StreetName null和dcheck,如果为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));

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