我正面臨一個令人討厭的情況,我的序列化/反序列化不像預期的那樣。C#對象<->數據合同序列化/反序列化添加了一些不需要的標記
我想
<OuterClass>
<Assets>
<Asset>Asset_A</Asset>
<Asset>Asset_B</Asset>
</Assets>
...
</OuterClass>
,但我發現
<OuterClass>
<Assets>
<Asset>
<Asset>Asset_A</Asset>
</Asset>
<Asset>
<Asset>Asset_B</Asset>
</Asset>
</Assets>
...
</OuterClass>
正如你所看到的資產標籤來兩次。
的代碼這樣做是..
public class OuterClass
{
[DataMember(Name = "Assets", Order = 10)]
public List<AssetClass> Assets { get; set; }
...
[DataContract(Name = "Asset", Namespace = "")]
public class AssetClass
{
[DataMember(Name = "Asset", Order = 10)]
public string Asset { get; set; }
...
}
}
我知道我已經列出「NAME =‘資產’」中的代碼兩次過,但如果我拿出其中一方,框架增加了它的裏面的自己的名字仍然搞砸了。不知何故,我懷疑我需要改變代碼本身的結構,但不知道如何做到這一點。
(編輯) 我正在使用in-framework序列化/反序列化助手。造成這種情況的代碼(簡化):
public string ToXmlString(OuterClass AssetsWrapper)
{
DataContractSerializer ser = new DataContractSerializer(typeof(OuterClass));
MemoryStream memStream = new MemoryStream();
// Convert object -> stream -> byte[] -> string (whew!)
ser.WriteObject(memStream, AssetsWrapper);
byte[] AssetsWrapperByte = memStream.ToArray();
return Encoding.UTF8.GetString(AssetsWrapperByte);
}
你有沒有考慮使用二進制序列化?另外,我認爲它被序列化爲一個子節點,因爲它是一個嵌套類。 – Zhanger
您的DataContract和DataMember是相同的 – DeveloperX
請顯示您用於序列化的代碼。 –