Я работаю с сериализацией XML в C#, где у меня есть несколько версий класса сообщений, которые наследуют друг от друга. < /p>
Вот упрощенная версия моего кода: < /p>
namespace XMLSerializeProblem.Base
{
public class ClassTest : DataModelsBase
{
public string BaseMessage { get; set; } = "Base Message";
}
}
namespace XMLSerializeProblem.Message1_0
{
public class ClassTest : Base.ClassTest
{
public string Message10 { get; set; } = "Message10";
}
}
namespace XMLSerializeProblem.Message1_1
{
public class ClassTest : Message1_0.ClassTest
{
public string Message11 { get; set; } = "Message11";
}
}
< /code>
и Program.cs < /p>
try
{
// Message 1.0
var message1_0 = new Message1_0.ClassTest
{
BaseMessage = "Base Message",
Message10 = "message10"
};
string data1_0 = message1_0.XmlSerialize();
Console.WriteLine(data1_0);
var obj1_0 = (Message1_0.ClassTest)message1_0.XmlDeserialize(data1_0);
Console.WriteLine($"Deserialized: {obj1_0.BaseMessage}, {obj1_0.Message10}");
// Message 1.1
var message1_1 = new Message1_1.ClassTest
{
BaseMessage = "Base Message",
Message10 = "message10",
Message11 = "message11"
};
string data1 = message1_1.XmlSerialize();
var obj1_1 = (Message1_1.ClassTest)message1_1.XmlDeserialize(data1);
Console.WriteLine($"Deserialized: {obj1_1.BaseMessage}, {obj1_1.Message10}, {obj1_1.Message11}");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
< /code>
и мой метод сериализации XML и детериализации < /p>
#region Protected Method
public string XmlSerialize()
{
XmlSerializer mySerializerWrite = new XmlSerializer(this.GetType());
if (mySerializerWrite == null)
{
return null;
}
MemoryStream myMemoryStream = new MemoryStream();
if (myMemoryStream == null)
{
return null;
}
XmlTextWriter myXmlTextWriter = new XmlTextWriter(myMemoryStream, Encoding.UTF8);
if (myXmlTextWriter == null)
{
return null;
}
mySerializerWrite.Serialize(myXmlTextWriter, this);
myMemoryStream.Seek(0, SeekOrigin.Begin);
StreamReader sr = new StreamReader(myMemoryStream, Encoding.UTF8);
if (sr == null)
{
return null;
}
string msg = sr.ReadToEnd();
return msg;
}
public object XmlDeserialize(string msg)
{
XmlSerializer serializer = new XmlSerializer(this.GetType());
if (serializer == null)
{
return null;
}
MemoryStream myMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(msg));
if (myMemoryStream == null)
{
return null;
}
object deserializedObject = null;
using (var myXmlTextReader = new XmlTextReader(myMemoryStream)
{
DtdProcessing = DtdProcessing.Ignore,
XmlResolver = null
})
{
if (myXmlTextReader != null)
{
deserializedObject = serializer.Deserialize(myXmlTextReader);
}
}
return deserializedObject;
}
#endregion
< /code>
Проблема < /p>
Когда я запускаю этот код, я получаю следующую ошибку: < /p>
system.invalidoperationException:
types 'xmlserializeprom.base.classtest' и 'xmlserializeprolem.messge.base.classtest' и 'xmlserializeprom.message1_0. Имя типа XML «classtest».
Это происходит, потому что XmlSerializer видит несколько классов с одним и тем же именем типа XML (ClasStest), хотя они находятся в разных пространствах имен. /> xmltype("baseNamespace.classtest")n
→ сериализация работает, но десериализация не сработала с
" не ожидается. »< /p>
[xmlrou но десериализация не сбои с
"не было ожидается." < /p>
[xmltype (namespace = "1_0")]
→ работает для сериализации, но десериализация возвращает NULL, если я не включаю пространство имен в xml. < /p>
xml с explicepace namespace. XML явно включает в себя правильное пространство имен. Хочу:
Каждая версия для правильного сериализации/deserialize.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... use-the-xm
MlSerializer: "types 'base.classtest' и 'message1_0.classtest' оба используют имя типа XML" classtest '", когда сериализ ⇐ C#
Место общения программистов C#
1758197529
Anonymous
Я работаю с сериализацией XML в C#, где у меня есть несколько версий класса сообщений, которые наследуют друг от друга. < /p>
Вот упрощенная версия моего кода: < /p>
namespace XMLSerializeProblem.Base
{
public class ClassTest : DataModelsBase
{
public string BaseMessage { get; set; } = "Base Message";
}
}
namespace XMLSerializeProblem.Message1_0
{
public class ClassTest : Base.ClassTest
{
public string Message10 { get; set; } = "Message10";
}
}
namespace XMLSerializeProblem.Message1_1
{
public class ClassTest : Message1_0.ClassTest
{
public string Message11 { get; set; } = "Message11";
}
}
< /code>
и Program.cs < /p>
try
{
// Message 1.0
var message1_0 = new Message1_0.ClassTest
{
BaseMessage = "Base Message",
Message10 = "message10"
};
string data1_0 = message1_0.XmlSerialize();
Console.WriteLine(data1_0);
var obj1_0 = (Message1_0.ClassTest)message1_0.XmlDeserialize(data1_0);
Console.WriteLine($"Deserialized: {obj1_0.BaseMessage}, {obj1_0.Message10}");
// Message 1.1
var message1_1 = new Message1_1.ClassTest
{
BaseMessage = "Base Message",
Message10 = "message10",
Message11 = "message11"
};
string data1 = message1_1.XmlSerialize();
var obj1_1 = (Message1_1.ClassTest)message1_1.XmlDeserialize(data1);
Console.WriteLine($"Deserialized: {obj1_1.BaseMessage}, {obj1_1.Message10}, {obj1_1.Message11}");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
< /code>
и мой метод сериализации XML и детериализации < /p>
#region Protected Method
public string XmlSerialize()
{
XmlSerializer mySerializerWrite = new XmlSerializer(this.GetType());
if (mySerializerWrite == null)
{
return null;
}
MemoryStream myMemoryStream = new MemoryStream();
if (myMemoryStream == null)
{
return null;
}
XmlTextWriter myXmlTextWriter = new XmlTextWriter(myMemoryStream, Encoding.UTF8);
if (myXmlTextWriter == null)
{
return null;
}
mySerializerWrite.Serialize(myXmlTextWriter, this);
myMemoryStream.Seek(0, SeekOrigin.Begin);
StreamReader sr = new StreamReader(myMemoryStream, Encoding.UTF8);
if (sr == null)
{
return null;
}
string msg = sr.ReadToEnd();
return msg;
}
public object XmlDeserialize(string msg)
{
XmlSerializer serializer = new XmlSerializer(this.GetType());
if (serializer == null)
{
return null;
}
MemoryStream myMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(msg));
if (myMemoryStream == null)
{
return null;
}
object deserializedObject = null;
using (var myXmlTextReader = new XmlTextReader(myMemoryStream)
{
DtdProcessing = DtdProcessing.Ignore,
XmlResolver = null
})
{
if (myXmlTextReader != null)
{
deserializedObject = serializer.Deserialize(myXmlTextReader);
}
}
return deserializedObject;
}
#endregion
< /code>
Проблема < /p>
Когда я запускаю этот код, я получаю следующую ошибку: < /p>
system.invalidoperationException:
types 'xmlserializeprom.base.classtest' и 'xmlserializeprolem.messge.base.classtest' и 'xmlserializeprom.message1_0. Имя типа XML «classtest».
Это происходит, потому что XmlSerializer видит несколько классов с одним и тем же именем типа XML (ClasStest), хотя они находятся в разных пространствах имен. /> xmltype("baseNamespace.classtest")n
→ сериализация работает, но десериализация не сработала с
" не ожидается. »< /p>
[xmlrou но десериализация не сбои с
"не было ожидается." < /p>
[xmltype (namespace = "1_0")]
→ работает для сериализации, но десериализация возвращает NULL, если я не включаю пространство имен в xml. < /p>
xml с explicepace namespace. XML явно включает в себя правильное пространство имен. Хочу:
Каждая версия для правильного сериализации/deserialize.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79768410/mlserializer-types-base-classtest-and-message1-0-classtest-both-use-the-xm[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия