相关疑难解决方法(0)

序列化私有成员数据

我正在尝试将对象序列化为具有许多属性的XML,其中一些属性是只读的.

public Guid Id { get; private set; }
Run Code Online (Sandbox Code Playgroud)

我已经标记了类[Serializable],我已经实现了ISerializable接口.

下面是我用来序列化对象的代码.

public void SaveMyObject(MyObject obj)
{
    XmlSerializer serializer = new XmlSerializer(typeof(MyObject));
    TextWriter tw = new StreamWriter(_location);
    serializer.Serialize(tw, obj);
    tw.Close();
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,它会在第一行显示此消息.

InvalidOperationException未处理:无法生成临时类(result = 1).错误CS0200:无法将属性或索引器"MyObject.Id"分配给 - 它是只读的

如果我将Id属性设置为public,则可以正常工作.有人可以告诉我,如果我正在做某事,或者至少是否可能吗?

.net c# xml serialization serializable

73
推荐指数
2
解决办法
6万
查看次数

为什么序列化属性需要序列化属性

根据我的理解,SerializableAttribute不提供编译时检查,因为它都是在运行时完成的.如果是这种情况,那么为什么要将类标记为可序列化?

串行器无法尝试序列化对象然后失败?这不就是它现在做的吗?当标记某些内容时,它会尝试并失败.如果你必须将事物标记为不可序列化而不是可序列化,那不是更好吗?那样你就不会有库不将事物标记为可序列化的问题?

.net c# serialization

38
推荐指数
2
解决办法
2万
查看次数

防止XmlSerializer在Deserialize上自动实例化List's

假设我有这个示例类:

public class MyClass
{
    public List<int> ListTest { get; set; }
    public string StringTest { get; set; }
    public int IntTest { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这段代码:

string xmlStr = "<MyClass><StringTest>String</StringTest></MyClass>";
XElement xml = XElement.Parse(xmlStr);
XmlSerializer ser = new XmlSerializer(typeof(MyClass));
using (XmlReader reader = xml.CreateReader())
{
    var res = ser.Deserialize(reader);
}
Run Code Online (Sandbox Code Playgroud)

完成反序列化后,其值为res:
ListTest- >清空列表,其中Count = 0(非空).
StringTest- >"String"按预期
IntTest- > 0表示期望(整数的默认值).

我想串行行事一样(default(List<T>)是空与李斯特的),而不是实例化它们.

我怎么能做到这样的事情?
顺便说一句,我必须使用XmlSerializer.

c# xmlserializer deserialization

2
推荐指数
1
解决办法
589
查看次数