问题 排序列表和序列化

安迪

新成员
已加入
2020年12月30日
留言内容
4
编程经验
Beginner
大家好。
如何将对象反序列化到此类,例如通过以下方法:

DataContractJsonSerializer serDB = new DataContractJsonSerializer(typeof(SortedList<string, SortedList<string, List<arccontent>>>));
DB = serDB.ReadObject(streamDB)作为SortedList<string, SortedList<string, List<arccontent>>>;

这样序列化器就不会重写比较器?
还是该怎么做?
谢谢你。
 
由主持人最后编辑:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,523
地点
悉尼,澳大利亚
编程经验
10+
是什么"rewrire comparer" mean? Are you saying that if you set the Comparer property, serialise the object and then deserialise it, the Comparer property is different? You need to be specific. If that's the case then how about you should use the code you have and provide some test data so that we can see exactly what you're seeing and, first, check whether you're actually doing something wrong? Even if you're not, at least we then have something to work from and extend instead of writing something from scratch that may not be compatible with what you already have. Basically, ALWAYS provide ALL the relevant information.
 

安迪

新成员
已加入
2020年12月30日
留言内容
4
编程经验
Beginner
>您是说如果设置Comparer属性,序列化对象然后反序列化它,那么Comparer属性是不同的吗?
对,就是这样。
好的,这是特定的代码:

class Program
{
static SortedList<string, string> DB =
new SortedList<string, string>(新的InvertedComparer()); // ******
静态void Main(string [] args)
{
DB.Add("John", "Smith");
DB.Add("Anna", "Born");
DB.Add("Sean", "Connery");

Console.WriteLine("Before serialize:");
for (int i = 0; i < DB.Count; i++)
{
Console.WriteLine(DB.Keys);
}
Console.WriteLine("After deserialize:");

var js = new DataContractJsonSerializer(typeof(SortedList<string, string>));
var ms = new MemoryStream();
js.WriteObject(ms,DB); //制作json

ms.Seek(0,SeekOrigin.Begin);
var DB1 = js.ReadObject(ms)作为SortedList<string, string>; // deserialize
for (int i = 0; i < DB1.Count; i++)
{
Console.WriteLine(DB1.Keys);
}
Console.ReadKey();
}
}
class InvertedComparer:IComparer<String>// Compaper示例(用于file)
{
public int Compare(字符串x,字符串y)
{
返回x.Substring(1).CompareTo(y.Substring(1));
}
}

反序列化后,我无法更改比较器属性-它是只读的。
有任何想法吗?
 

约翰H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,048
地点
挪威
编程经验
10+
这是发布代码的方法:
insertcode.png


创建一个继承SortedList的类<string, string>,添加一个无参数的构造函数,该构造函数调用基本构造函数并传递比较器。这是反序列化对象时DataContractJsonSerializer调用的构造方法。
example:
public class InvertedSortedList : SortedList<string, string>
{
    public InvertedSortedList() : base(new InvertedComparer())
    {
    }
}

您也可以使用原始帖子中的值中的SortedList进行相同操作:
SortedList<string, SortedList<string, List<arccontent>>>
>class SortedListValues for SortedList<string, List<arccontent>>
>SortedListMain的class SortedListMain<字符串,SortedListValues>
 
最佳 底部