gpt4 book ai didi

c# - XML 序列化和具有二进制属性的类 - 我怎样才能让它工作?

转载 作者:行者123 更新时间:2023-12-04 02:23:59 26 4
gpt4 key购买 nike

我有如下所示的序列化方法。问题是我正试图将一个包含二进制类型属性的类传递给它。由于此属性类型,序列化失败。有什么方法可以序列化具有二进制类型属性的类吗?

    private string Serialize<TEntity>(TEntity instance)
{
string retStr = "";
XmlSerializer xs = new XmlSerializer(typeof(TEntity));
System.IO.StringWriter writer = new System.IO.StringWriter();
xs.Serialize(writer, instance);
retStr = writer.ToString();
writer.Close();

return retStr;
}

这是类中表示 Binary 属性的部分。

    /// <summary>
/// Row version number
/// </summary>
[DataMember(Order = 5)]
public System.Data.Linq.Binary VersionNumber { get; set; }

最佳答案

有点晚了,但如果其他人正在寻找解决方案,我会在这里发布我的:

首先,将 System.Xml.Serialization.XmlIgnore 添加到二进制属性:

以我为例:

 <Global.System.Data.Linq.Mapping.ColumnAttribute(Storage:="_Bericht", DbType:="VarBinary(MAX)", UpdateCheck:=UpdateCheck.Never),
System.Xml.Serialization.XmlIgnore> _
Public Property Bericht() As System.Data.Linq.Binary
Get
Return Me._Bericht.Value
End Get
Set(value As System.Data.Linq.Binary)
If (Object.Equals(Me._Bericht.Value, Value) = False) Then
Me.OnBerichtChanging(Value)
Me.SendPropertyChanging()
Me._Bericht.Value = Value
Me.SendPropertyChanged("Bericht")
Me.OnBerichtChanged()
End If
End Set
End Property

其次,添加一个新属性,使二进制值可用作 byte()

Public Property BerichtAsByte As Byte()
Get
If Me.Bericht Is Nothing Then Return Nothing
Return Me.Bericht.ToArray
End Get
Set(value As Byte())
If value Is Nothing Then
Me.Bericht = Nothing
Else
Me.Bericht = New Data.Linq.Binary(value)
End If
End Set
End Property

就是这样。现在该实体是可序列化的并存储所有属性。

关于c# - XML 序列化和具有二进制属性的类 - 我怎样才能让它工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2209819/

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