Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Silverlight中序列化哈希_C#_Serialization_Hashcode - Fatal编程技术网

C# 在Silverlight中序列化哈希

C# 在Silverlight中序列化哈希,c#,serialization,hashcode,C#,Serialization,Hashcode,我有一个Silverlight应用程序。此应用程序将调用一个web服务(我已经编写)以获取客户列表。我试图生成一个表示客户列表的哈希代码。为了做到这一点,我在Silverlight应用程序和服务器端代码中编写了以下代码: public static string GetHashCode<T>(T data) { SHA256Managed crypto = new SHA256Managed(); try { // Serialize the object

我有一个Silverlight应用程序。此应用程序将调用一个web服务(我已经编写)以获取客户列表。我试图生成一个表示客户列表的哈希代码。为了做到这一点,我在Silverlight应用程序和服务器端代码中编写了以下代码:

public static string GetHashCode<T>(T data)
{
  SHA256Managed crypto = new SHA256Managed();
  try
  {
    // Serialize the object
    byte[] serializedBytes;
    using (var memoryStream = new MemoryStream())
    {
      var serializer = new DataContractSerializer(typeof(T));
      serializer.WriteObject(memoryStream, data);
      memoryStream.Seek(0, SeekOrigin.Begin);
      serializedBytes = memoryStream.ToArray();
    }

    byte[] hashed = crypto.ComputeHash(serializedBytes);

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < hashed.Length; i++)
      sb.Append(hashed[i].ToString("X2"));
    return sb.ToString();
  }
  catch (Exception)
  {
    return string.Empty;
  }
}
公共静态字符串GetHashCode(T数据)
{
SHA256Managed crypto=新的SHA256Managed();
尝试
{
//序列化对象
字节[]序列化的数据字节;
使用(var memoryStream=new memoryStream())
{
var serializer=新的DataContractSerializer(typeof(T));
serializer.WriteObject(memoryStream,data);
memoryStream.Seek(0,SeekOrigin.Begin);
serializedBytes=memoryStream.ToArray();
}
字节[]哈希=加密计算哈希(序列化字节);
StringBuilder sb=新的StringBuilder();
for(int i=0;i
我在服务器端的方法如下所示:

[OperationContract]
public List<Customer> GetCustomers() 
{
  List<Customer> customers = Customer.GetAll();
  string hash = GetHashCode<List<Customer>>(customers);
  return customers;
}
[运营合同]
公共列表GetCustomers()
{
List customers=Customer.GetAll();
字符串哈希=GetHashCode(客户);
返回客户;
}
在客户端,在我的Silverlight应用程序中,我的GetCustomersCompleted事件处理程序中包含以下内容:

string hash = GetHashCode<List<Customer>>(e.Result.ToList());
string hash=GetHashCode(e.Result.ToList());
请注意,我首先将事件处理程序结果转换为列表。原因是因为结果实际上是一个可观察的集合。我提出这个问题是因为我相信这就是我的问题所在


我的问题是,即使数据相同,我的哈希值在服务器端和客户端上也不同。这是基于我在手表窗口看到的。我觉得这与结果从服务器传递到应用程序时发生的序列化有关。然而,我不知道该如何解决这个问题。我需要一个散列数据,但我不知道如何让它们对齐。感谢您提供的任何帮助。

只是出于好奇。。。为什么?在看hashig之前:您是否先比较了序列化的字节?我不确定DCS是否承诺使用完全相同的布局:只是它是否兼容。