Я сериализую XML-файл с классами, созданными автоматически с помощью специальной вставки XML. Я все сделал без проблем, более 3000 строк (а Xml файл более 600), но у меня есть тег, который я не могу сериализовать. В исходном XML-файле у меня есть это:
<sdtc:statusCode code = "active"/>
Это класс, созданный Visual Studio:
public string code
{
get { return this.codeField; }
set { this.codeField = value; }
}
Я сериализую это так:
statusCode oStatusCode = new statusCode();
oStatusCode.code = "active";
И это сериализованный результат:
<statusCode code = "active" />
Как видите, префикс sdtc: отсутствует и я не знаю, как его вставить.
Я попробовал с:
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "urn:hl7-org:sdtc")]
но это не имеет никакого эффекта. Я искал несколько часов, но не смог найти решения. К сожалению, это мой первый опыт сериализации.
Есть идеи или предложения?
Обновлено: Поскольку классы сериализации имеют длину более 12 000 строк, я не думаю, что смогу их вставить, попробую вставить что-нибудь полезное, надеюсь, я не ошибаюсь. Первая строка XML-файла:
<ClinicalDocument xmlns = "urn:hl7-org:v3" xmlns:mif = "urn:hl7-org:v3/mif" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:lab = "urn:oid:1.3.6.1.4.1.19376.1.3.2" xmlns:sdtc = "urn:hl7-org:sdtc">
Первые строки кода сериализатора:
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "urn:hl7-org:v3")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "urn:hl7-org:v3", IsNullable = false)]
В элементе <sdtc:statusCode code = "active"/>sdtc: — это не суффикс, а префикс пространства имен XML . Возможно, префикс был опущен, потому что соответствующее пространство имен в настоящее время является пространством имен по умолчанию, но я не могу сказать наверняка без минимального воспроизводимого примера . Но, возможно, XML-сериализация и префиксы пространств имен могут помочь.
Следующее может представлять интерес: InvalidOperationException при десериализации пользовательского XML (отсутствие пространства имен)
Теперь я попытался вставить дополнительную информацию, но не думаю, что вставка файла Xml с более чем 600 строками или классов с более чем 3000 строками возможна.
@Пако, нам этого недостаточно, чтобы помочь тебе. Мы увидим 1) Класс, содержащий свойство code. Вы можете удалить все остальные свойства, но оставить все атрибуты XmlSerializer, примененные к классу и свойству. 2) Если этот класс не является корневым классом, то корневой класс ссылается на класс code со всеми атрибутами сериализации XML. Опять же, ненужные свойства можно удалить. 3) XML-код, который вы хотите сгенерировать для этой модели, но в настоящее время не можете.
Поскольку классы сериализации имеют длину более 12 000 строк, я не думаю, что смогу их вставить: длина сообщения может достигать 30 000 символов. Это ограничение касается ответов. Я не уверен, распространяется ли ограничение на оригинальные сообщения. Тем не менее, чем длиннее ваш пост, тем меньше вероятность, что он понравится большинству людей.
Я не думаю, что вставка XML-файла, содержащего более 600 строк, или классов, содержащих более 3000 строк, возможна: во многих программах код превышает 3000 строк. Хотя вам, возможно, и не захочется читать все строки, это, безусловно, возможно. Самые успешные люди в жизни — это те, кто был готов делать то, чего другие не хотели делать.
URL-адрес сообщения, которое я предоставил выше, дает вам все необходимое для решения вашей проблемы. Вам следует создать минимальный воспроизводимый пример, который вы сможете использовать для тестирования, чтобы убедиться, что вы понимаете, как использовать пространства имен. Здесь также можно разместить минимальный воспроизводимый пример, если у вас возникнут трудности, чтобы другие могли использовать его для воссоздания проблемы.





Это мой первый опыт работы с сериализатором, но для решения проблемы я использовал это решение, конечно неправильное и неэлегантное, но оно работает.
string cRead = File.ReadAllText("mycda.xml");
System.Xml.Linq.XDocument xdoc = System.Xml.Linq.XDocument.Parse(cRead);
string cNew = xdoc.ToString();
cNew = cNew.Replace("<statusCode code=\"activemod\" />", "<sdtc:statusCode code=\"active\" />");
(Я использую значение activemod, чтобы отличить его от всех остальных)
Использовали ли вы для этого искусственный интеллект, например ChatGPT?
Да, но это не решило мою проблему.
Не понимаю почему -1, но все равно спасибо
Как вы сериализуете свой тип в XML? Не могли бы вы отредактировать свой вопрос, чтобы поделиться минимально воспроизводимым примером , как указано в Как задать? Нам нужно увидеть полный (возможно, упрощенный) образец XML, который вы хотите сгенерировать, + созданные вами типы, которые следует сериализовать в требуемый XML. Спасибо!