Wednesday, November 24, 2021

Cách serialize và deserialize XML

 public static string XmlSerialize(object ObjectSerialized)

    {
        try
        {
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.OmitXmlDeclaration = true;
            settings.Indent = true;
            settings.NewLineHandling = NewLineHandling.Replace;
            settings.NewLineChars = "\n";
            StringWriter stringWriter = new StringWriter();
            XmlWriter writer = XmlWriter.Create(stringWriter, settings);
            XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
            namespaces.Add(string.Empty, string.Empty);
            new XmlSerializer(ObjectSerialized.GetType()).Serialize(writer, ObjectSerialized, namespaces);
            return stringWriter.ToString();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    public static object XmlDeserialize(string strXml, Type objType)
    {
        try
        {
            StringReader rd = new StringReader(strXml);
            return new XmlSerializer(objType).Deserialize(rd);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

Wednesday, November 10, 2021

Thiết lập ContentType cho Web service Client

 Khi gọi WSDL bằng Web Service client (SoapHttpClientProtocol), nếu gặp lỗi Client found response content type of 'text/xml;charset=utf-8', but expected 'text/xml' là do ContentType mặc định của response là text/xml nhưng response trả về từ đối tác là text/xml;charset=utf-8.

Để khắc phục, trong class service kế thừa từ SoapHttpClientProtocol, bổ sung override hàm GetWriterForMessage để có thể gán lại ContentType cho SoapMessage.


public partial class PartnerAPI : System.Web.Services.Protocols.SoapHttpClientProtocol 

{
    protected override System.Xml.XmlWriter GetWriterForMessage(SoapClientMessage message, int bufferSize)

        {

            message.ContentType = "text/xml;charset=utf-8";

            return base.GetWriterForMessage(message, bufferSize);

        }

}