我一直在對這個問題進行一番討論。這似乎是一個簡單的解決方案,但我已經搜索了互聯網,並嘗試了很多事情。使用「 n」反序列化字符串列表會導致出現空字符串
我有一個複雜的對象,其中包含一個字符串列表,需要序列化到XML然後反序列化。
序列化代碼早已成爲應用程序的一部分,可以在無數其他場景下工作,但這裏的問題似乎是字符串列表中的一個元素僅僅是一個新行字符(即「\ n」) 。
這是我的理解,根據我的研究,它按預期進行序列化(見下文),但反序列化後元素包含一個空字符串(即「」)而不是「\ n」。
這裏是代碼...
public DoStuff(ItemTypeObj item)
{
string myItem = XmlSerialize<ItemType>(item);
ItemTypeObj myNewItemTypeObj = XmlDeserialize<CustomItem>(myItem)
}
public static string XmlSerialize<T>(T objectToSerialize)
{
string ret = string.Empty;
XmlSerializer s = new XmlSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream())
{
s.Serialize(ms, objectToSerialize);
ms.Position = 0;
using (StreamReader sr = new StreamReader(ms))
{
sRet = sr.ReadToEnd();
}
}
return ret;
}
public static T XmlDeserialize<T>(string serializedObject)
{
T retVal = default(T);
byte[] ba = ASCIIEncoding.UTF8.GetBytes(serializedObject);
using (MemoryStream ms = new MemoryStream(ba))
{
XmlSerializer s = new XmlSerializer(typeof(T));
retVal = (T)s.Deserialize(ms);
}
return retVal;
}
給你發送的數據中的一個想法,ItemTypeObj是包含一個字符串列表中的對象。該字符串列表可以是變長,但樣本數據看起來是這樣的......
[0] = "Zero element text \n"
[1] = "[element1]"
[2] = "\n"
[3] = "[element3]"
[4] = "\n"
[5] = "[element5]"
連載時它看起來這樣的(這似乎是正確的我):
<Text>
<string>Zero element text
</string>
<string>[element1]</string>
<string>
</string>
<string>[element3]</string>
<string>
</string>
<string>[element5]</string>
<Text>
從我」已經閱讀的換行符在上面的xml中表現得如預期。問題是它反序列化的字符串列表後是這樣的:
[0] = "Zero element text \n"
[1] = "[element1]"
[2] = ""
[3] = "[element3]"
[4] = ""
[5] = "[element5]"
只有在這也有文本的元素換行字符(例如,[0])仍然存在。其他兩個替換爲空字符串。如果我向這些元素添加文本,新行將被保留。
查看反序列化中的字節數組,其中「\ n」變成了10(又名LF,新行)的序列化字符串中位置的數組元素。然後在反序列化中沒有成功轉化爲「\ n」。也許這個問題太多了。
任何見識將不勝感激。謝謝。
感謝。這似乎工作,雖然xml字符串是未格式化的。任何人都可以解釋爲什麼原始代碼只刪除新行,如果它是list元素中的_only_事物?這就是爲什麼我看到的鏈接似乎不適用於我。 – John
序列化程序刪除換行符,因爲它不認爲它是數據。 – Romoku
@Romuku - 在我的評論中,這不是對問題的真正解釋。 :)另外,只有我的代碼中的反序列化方法無法按照需要的方式工作。我可以得到我想要的只是用反序列化來代替我的反序列化。所以這很複雜。 – John