gpt4 book ai didi

c# - DataContractSerializer - 问题

转载 作者:行者123 更新时间:2023-11-30 14:18:47 25 4
gpt4 key购买 nike

我遇到了一个关于数据协定序列化程序的非常愚蠢的问题。它拒绝工作。我只是想将一个对象序列化为一个 XmlDocument,但我似乎碰壁了。

以下是我希望序列化的数据契约(Contract):

[DataContract(Namespace="urn://test", Name = "ServiceFault1")]
public class ServiceFault
{
[DataMember()]
public int hello { get; set; }

[DataMember()]
public List<Error> Errors {get; set;}
}

[DataContract(Namespace = "urn://test", Name = "Error1")]
public class Error
{
[DataMember()]
public string ErrorCategoryCode { get; set; }

[DataMember()]
public string LocalErrorCode { get; set; }

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

以及执行序列化的方法;

    public static XmlDocument Serialize(ServiceFault toSer)
{
DataContractSerializer ser = new DataContractSerializer(toSer.GetType());

MemoryStream mem = new MemoryStream();
ser.WriteObject(XmlWriter.Create(mem), toSer);

XmlDocument tmp = new XmlDocument();
mem.Seek(0, SeekOrigin.Begin);
tmp.Load(mem);

return tmp;
}

每当我调用序列化方法时,内存流总是空的。我也尝试过字符串生成器,只是想看看是否有什么结果。

如果我使用 XmlSerializer 这可行,但我想了解为什么上面的代码不起作用?为什么序列化器总是空的?

感谢您的帮助!TM

最佳答案

这是我用来序列化我的对象的代码,它似乎对我有用。另外我认为 DataContract 属性不是必需的,我只是在一个地方使用一个属性来忽略一个成员。

DataContractSerializer serializer = new DataContractSerializer(toSers.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, toSer);
ms.Position = 0;

string serializedContent;
using(StreamReader sr = new StreamReader(ms))
{
serializedContent = sr.ReadToEnd();
}

我看到的区别是我直接写入 MemoryStream,并将 Position 设置为0,而不是调用 Seek()。

如果需要,您可以在实例上使用 XmlDocument.LoadXml 将结果字符串加载到 XmlDocument 中。

关于c# - DataContractSerializer - 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3858205/

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