在C#和Python中,编码和序列化代码可能会产生不同的结果,这是因为它们使用不同的编码和序列化算法。以下是一个解决方法,可以在C#和Python中生成相同的结果:
在C#中:
using System;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Json;
public static class JsonHelper
{
public static string Serialize(T obj)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, obj);
return Encoding.UTF8.GetString(ms.ToArray());
}
}
public static T Deserialize(string json)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
return (T)serializer.ReadObject(ms);
}
}
}
public class MyClass
{
public string Name { get; set; }
public int Age { get; set; }
}
public class Program
{
public static void Main()
{
MyClass myObject = new MyClass { Name = "John", Age = 25 };
string json = JsonHelper.Serialize(myObject);
Console.WriteLine(json);
}
}
在Python中:
import json
class MyClass:
def __init__(self, name, age):
self.name = name
self.age = age
def toJSON(self):
return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True, indent=4)
myObject = MyClass("John", 25)
jsonStr = myObject.toJSON()
print(jsonStr)
这两个示例代码都创建了一个包含Name
和Age
属性的MyClass
类的对象,并将其序列化为JSON字符串。在C#代码中,我们使用DataContractJsonSerializer
类来进行序列化和反序列化操作,并且通过Encoding.UTF8
来确保编码一致性。在Python代码中,我们使用json
模块的dumps
函数将对象转换为JSON字符串。通过default=lambda o: o.__dict__
参数,我们可以将对象的__dict__
属性作为默认转换函数,以确保所有属性都被序列化。
上一篇:编码和特殊字符终端问题。