ShowProgramCode

2023年7月4日 星期二

C# Net6 XML轉物件 錯誤訊息 ... xmlns='' was not expected

今天遇到需要將DTO與XML相互轉換,但卻一直遇到狀況。
後續處理完畢,特別紀錄一下。

XML:

<massege>
<header code="OTP" id="PUSID">
<from>127.0.0.1</from>
<to>255.0.0.0</to>
</header>
<body>
訊息內容
</body>
</message>

DTO:

[XmlTypeAttribute(AnonymousType = true)]
[XmlRootAttribute(Namespace = "", IsNullable = false, ElementName = "message")]
public class TestMessage
{
	public TestMessageHeader header{get;set;}
	public string body{get;set;}
}

[XmlTypeAttribute(AnonymousType = true)]
public class TestMessageHeader
{
	[XmlAttributeAttribute()]
	public string code { get; set; } = string.Empty;
	[XmlAttributeAttribute()]
	public string id { get; set; } = string.Empty;
	public string from {get;set;} = string.Empty;
	public string to{get;set;} = string.Empty;
}

程式碼:

public static string XmlToDto<T>(string xml, ref T obj) where T : class
{
	XmlSerializer Serializer = new XmlSerializer(typeof(T));
	try
	{
		using (StringReader reader = new StringReader(xml))
		{
			obj = (T)Serializer.Deserialize(reader);
		}

		return "0000";
	}
	catch (Exception ex)
	{
		return ex.Message;
	}
}

public static string XmlToDto<T>(string xml, string rootTag, ref T obj) where T : class
{
	XmlSerializer Serializer = new XmlSerializer(typeof(T), new XmlRootAttribute(rootTag));
	try
	{
		using (StringReader reader = new StringReader(xml))
		{
			obj = (T)Serializer.Deserialize(reader);
		}

		return "0000";
	}
	catch (Exception ex)
	{
		return ex.Message;
	}
}

參考網頁:https://dotblogs.com.tw/initials/2020/11/18/184450