Свойство InvoiceDetailHeaderIndicator равно object
Так ... не делайте этого? Сделайте это string
, и вы должны быть настроены.
В конечном счете, суть в том, что XmlSerializer
хочет иметь возможность надежно обрабатывать данные в обоих направлениях; это его работа. Есть два способа сделать это:
- знать тип статически (т.е.
string
вместо object
в модели типов) - вставлять дополнительные метаданные в полезную нагрузку (
xsi:type="xsd:string"
)
Если вы не хотите 2, вам понадобится 1, иначе не может работать . Откровенно говоря, 1 - гораздо лучшая идея в любом случае .
Я проверил с локальной минимальной настройкой, и это сработало нормально:
public class InvoiceHeaderThing
{
public string InvoiceDetailHeaderIndicator { get; set; }
}
Полный код ниже:
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
static class P
{
static void Main()
{
const string path = "my.xml";
var objectCxml = new cXML();
objectCxml.Request.InvoiceDetailRequest.InvoiceDetailRequestHeader.InvoiceDetailHeaderIndicator = "";
XmlSerializer s = new XmlSerializer(typeof(cXML));
using (XmlTextWriter tw = new XmlTextWriter(path, Encoding.UTF8))
{
s.Serialize(tw, objectCxml);
}
Console.WriteLine(File.ReadAllText(path));
}
}
public class cXML
{
public RequestThing Request { get; set; } = new RequestThing();
}
public class RequestThing
{
public InvoiceDetailThing InvoiceDetailRequest { get; set; } = new InvoiceDetailThing();
}
public class InvoiceDetailThing
{
public InvoiceHeaderThing InvoiceDetailRequestHeader { get; set; } = new InvoiceHeaderThing();
}
public class InvoiceHeaderThing
{
public string InvoiceDetailHeaderIndicator { get; set; }
}