Сериализация XML C#.NET: XMLAttribute не устанавливает NameSpace, и только элемент пароля в объекте UserName имеет атрибC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Сериализация XML C#.NET: XMLAttribute не устанавливает NameSpace, и только элемент пароля в объекте UserName имеет атриб

Сообщение Anonymous »

Я пытаюсь сгенерировать этот XML-код Soap:




TestUser02
Password1



1






100001



0
0
1
0





Но я получаю этот XML, используя свой код ниже:




TestUser02
Password1



1






100001



0
0
1
0





У меня есть код C#:
using System;
using System.Collections.Generic;
using System.Xml.Serialization;

namespace WorkDayAPI
{
[XmlRoot("Envelope", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
public class Envelope
{
[XmlElement("Header")]
public Header Header { get; set; }

[XmlElement("Body")]
public Body Body { get; set; }
}

public class Header
{
[XmlElement("Security", Namespace = "http://docs.oasis-open.org/wss/2004/01/ ... xt-1.0.xsd")]
public Security Security { get; set; }

[XmlElement("Workday_Common_Header", Namespace = "urn:com.workday/bsvc")]
public WorkdayCommonHeader WorkdayCommonHeader { get; set; }
}

public class Security
{
[XmlAttribute("mustUnderstand", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
public string MustUnderstand { get; set; }

[XmlElement("UsernameToken", Namespace = "http://docs.oasis-open.org/wss/2004/01/ ... xt-1.0.xsd")]
public UsernameToken UsernameToken { get; set; }
}

public class UsernameToken
{
[XmlElement("Username")]
public string Username { get; set; }

[XmlElement("Password", Namespace = "http://docs.oasis-open.org/wss/2004/01/ ... xt-1.0.xsd")]
public string Password { get; set; }

[XmlAttribute("Type")]
public string PasswordType { get; set; }
}

public class WorkdayCommonHeader
{
[XmlElement("Include_Reference_Descriptors_In_Response", Namespace = "urn:com.workday/bsvc")]
public string IncludeReferenceDescriptorsInResponse { get; set; }
}

public class Body
{
[XmlElement("Get_Customers_Request", Namespace = "urn:com.workday/bsvc")]
public GetCustomersRequest GetCustomersRequest { get; set; }
}

public class GetCustomersRequest
{
[XmlElement("Request_References", Namespace = "urn:com.workday/bsvc")]
public RequestReferences RequestReferences { get; set; }

[XmlAttribute("version", Namespace = "urn:com.workday/bsvc")]
public string Version { get; set; }

[XmlElement("Response_Group", Namespace = "urn:com.workday/bsvc")]
public ResponseGroup ResponseGroup { get; set; }
}

public class RequestReferences
{
[XmlElement("Customer_Reference", Namespace = "urn:com.workday/bsvc")]
public CustomerReference CustomerReference { get; set; }

}

public class CustomerReference
{

[XmlAttribute(AttributeName = "Descriptor", Namespace = "urn:com.workday/bsvc")]
public string Descriptor { get; set; }

[XmlElement(ElementName = "ID")]
public CustomerData CustomerData { get; set; }

}

[XmlType(Namespace = "urn:com.workday/bsvc")]
public class CustomerData
{
[XmlText]
public string ID { get; set; }

[XmlAttribute(AttributeName = "type", Namespace = "urn:com.workday/bsvc")]
public string Type { get; set; }
}

public class ResponseGroup
{
[XmlElement("Include_Reference", Namespace = "urn:com.workday/bsvc")]
public string IncludeReference { get; set; }

[XmlElement("Include_Customer_Data", Namespace = "urn:com.workday/bsvc")]
public string IncludeCustomerData { get; set; }

[XmlElement("Include_Customer_Balance", Namespace = "urn:com.workday/bsvc")]
public string IncludeCustomerBalance { get; set; }

[XmlElement("Include_Customer_Activity_Detail", Namespace = "urn:com.workday/bsvc")]
public string IncludeCustomerActivityDetail { get; set; }
}
}

Вот как я настраиваю пространства имен и присваиваю значения:
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using WorkDayAPI.Input;

namespace WorkDayAPI
{
class Program
{
static void Main(string[] args)
{
GenerateSoapXmlRequest();

}

public static void GenerateSoapXmlRequest()
{
// Create the request object and populate it with values
var soapRequest = new Envelope
{
Header = new Header
{
Security = new Security
{
MustUnderstand = "1",
UsernameToken = new UsernameToken
{
Username = "TestUser02",
Password = "Password1",
PasswordType = "http://docs.oasis-open.org/wss/2004/01/ ... sswordText"

}
},
WorkdayCommonHeader = new WorkdayCommonHeader
{
IncludeReferenceDescriptorsInResponse = "1"
}
},
Body = new Body
{
GetCustomersRequest = new GetCustomersRequest
{
Version = "v42.0",
RequestReferences = new RequestReferences
{
CustomerReference = new CustomerReference
{
Descriptor = "?",
CustomerData = new CustomerData
{
Type = "Customer_ID",
ID = "100001"
}
}

},
ResponseGroup = new ResponseGroup
{
IncludeReference = "0",
IncludeCustomerData = "0",
IncludeCustomerBalance = "1",
IncludeCustomerActivityDetail = "0"
}
}
}
};

// Prepare the namespaces with appropriate prefixes
var namespaces = new XmlSerializerNamespaces();
namespaces.Add("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
namespaces.Add("bsvc", "urn:com.workday/bsvc");
namespaces.Add("wsse", "http://docs.oasis-open.org/wss/2004/01/ ... xt-1.0.xsd");

// Create an XmlSerializer instance for the Envelope class
var serializer = new XmlSerializer(typeof(Envelope));

// Create a StringWriter to hold the serialized XML
using (var stringWriter = new StringWriter())
{
// Create an XmlWriterSettings object to control XML formatting
var xmlSettings = new XmlWriterSettings
{
Encoding = Encoding.UTF8,
Indent = true,
OmitXmlDeclaration = true
};

// Create an XmlWriter with the settings and namespaces
using (var xmlWriter = XmlWriter.Create(stringWriter, xmlSettings))
{
// Serialize the object to XML, passing the namespaces
serializer.Serialize(xmlWriter, soapRequest, namespaces);
}

// Get the generated XML as a string
string soapXml = stringWriter.ToString();

// Print the serialized XML to the console
Console.WriteLine(soapXml);

// Optionally, save the XML to a file
File.WriteAllText("SoapRequest.xml", soapXml);
}
}

}
}

Как исправить атрибут Type в пароле?
Как установить пространство имен bsvc< /strong> в атрибуте Body?
Вот разница между обязательным и сгенерированным XML:
ComparisonPic:[![enter image description here][1]][1]


Подробнее здесь: https://stackoverflow.com/questions/792 ... ly-passwor
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»