gpt4 book ai didi

c# - 使用 DataContract Serializer 序列化

转载 作者:行者123 更新时间:2023-11-30 22:05:08 30 4
gpt4 key购买 nike

我有 IProductDescription 列表,我想使用 DataContract Serializer 将其序列化为有效的 xml。这样我可以稍后反序列化它。这是实现 IProductDescription 接口(interface)的 ProductDescription 类。

[DataContract]
[KnownType(typeof(ProductDescription))]
public class ProductDescription : IProductDescription
{
[DataMember]
public List<AssetDescription> Assets { get; set; }

[DataMember]
public string ProductId { get; set; }

[DataMember]
public string Description { get; set; }

[DataMember]
public string FormattedPrice { get; set; }

[DataMember]
public DateTime? ExpirationDate { get; set; }

[DataMember]
public ProductStatus ProductStatus { get; set; }

[DataMember]
public string ProductPageUrl { get; set; }

[DataMember]
public string PackageDownloadLocationUrl { get; set; }

}

这是我的 AssetDescription 类

[DataContract]
public class AssetDescription
{
[DataMember]
public string Type { get; set; }

[DataMember]
public string Name { get; set; }

[DataMember]
public string Description { get; set; }

[DataMember]
public string IconUrl { get; set; }

}

现在我想序列化它。我已经有了序列化的实现。在这里和那里阅读后,我知道我必须添加一些 knowntype 属性,但我没有成功。所以有人可以帮我解决这个问题。

编辑 :- 添加属性后,事物得到序列化但以错误的方式出现在我的序列化字符串的顶部。

<ArrayOfanyType xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<anyType xmlns:d2p1="http://schemas.datacontract.org/2004/07/ProductDescriptionModel" i:type="d2p1:ProductDescription">
<d2p1:Assets>

但是当我对它进行反序列化时,它会抛出一个异常,即 ArrayType 不应该是 ArrayOfanyType

我想序列化/反序列化 IProductDescription 的列表

最佳答案

尝试将 KnownType 放入序列化器中。

void Main()
{
var serializer = new DataContractSerializer(typeof(IProductDescription), knownTypes: new[] { typeof(ProductDescription) });

using(var writer = new XmlTextWriter("C:\\Temp\\test.xml", Encoding.UTF8))
{
serializer.WriteObject(writer, new ProductDescription());
}

using(var reader = new XmlTextReader("C:\\Temp\\test.xml"))
{
var o = serializer.ReadObject(reader) as IProductDescription;

Console.WriteLine(o.ToString());
}
}

public enum ProductStatus { One, Two, Three }

public interface IProductDescription
{
[DataMember]
List<AssetDescription> Assets { get; set; }

[DataMember]
string ProductId { get; set; }

[DataMember]
string Description { get; set; }

[DataMember]
string FormattedPrice { get; set; }

[DataMember]
DateTime? ExpirationDate { get; set; }

[DataMember]
ProductStatus ProductStatus { get; set; }

[DataMember]
string ProductPageUrl { get; set; }

[DataMember]
string PackageDownloadLocationUrl { get; set; }

}

[DataContract]
public class ProductDescription : IProductDescription
{
[DataMember]
public List<AssetDescription> Assets { get; set; }

[DataMember]
public string ProductId { get; set; }

[DataMember]
public string Description { get; set; }

[DataMember]
public string FormattedPrice { get; set; }

[DataMember]
public DateTime? ExpirationDate { get; set; }

[DataMember]
public ProductStatus ProductStatus { get; set; }

[DataMember]
public string ProductPageUrl { get; set; }

[DataMember]
public string PackageDownloadLocationUrl { get; set; }

}

[DataContract]
public class AssetDescription
{
[DataMember]
public string Type { get; set; }

[DataMember]
public string Name { get; set; }

[DataMember]
public string Description { get; set; }

[DataMember]
public string IconUrl { get; set; }

}

关于c# - 使用 DataContract Serializer 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24564000/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com