我无法将JSON字符串转换为asp.net中的.net对象。我正在使用隐藏字段将JSON字符串从客户端发送到服务器(通过将JSON object.Tostring()保留在隐藏字段中并读取文件后面代码中的隐藏字段值)
Json字符串/对象:
[[{"OfferId":"1","OrderValue":"11","HostingTypeID":"3"}, {"OfferId":"1","OrderValue":"11","HostingTypeID":"3"}, {"OfferId":"1","OrderValue":"11","HostingTypeID":"3"}, {"OfferId":"1","OrderValue":"2","HostingTypeID":"3"}, {"OfferId":"1","OrderValue":"2","HostingTypeID":"3"}, {"OfferId":"1","OrderValue":"67","HostingTypeID":"3"}, {"OfferId":"1","OrderValue":"67","HostingTypeID":"3"}], [{"OfferId":"1","OrderValue":"99","HostingTypeID":"6"}], [{"OfferId":"1","OrderValue":"10","HostingTypeID":"8"}]]
.Net对象
public class JsonFeaturedOffer { public string OfferId { get; set; } public string OrderValue { get; set; } public string HostingTypeID { get; set; } }
文件后面代码中的会话代码
byte[] byteArray = Encoding.ASCII.GetBytes(HdnJsonData.Value); MemoryStream stream = new MemoryStream(byteArray); DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(JsonFeaturedOffer)); object result= serializer.ReadObject(stream); JsonFeaturedOffer jsonObj = result as JsonFeaturedOffer;
转换时出现以下错误:
从名称空间“。”中期待元素“ root”。遇到“无”,名称为“,名称空间”。
我建议不要使用 内置的 轻量级 JavaScriptSerializer 来代替手动执行此操作。要序列化/反序列化的类上 不需要属性 。
它也比DataContractJsonSerializer 更 灵活,更快 ,因为它不必关心所有wcf东西。此外,它具有 通用重载 ,使其使用起来非常简单,并且还可以处理 匿名类型 。
序列化:
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); var objectAsJsonString = serializer.Serialize(objectToSerialize);
反序列化:
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); JsonFeaturedOffer deserializedObject = serializer.Deserialize<JsonFeaturedOffer>(s_JsonBaseDate);
为了使它更加容易,您可以创建Extension方法,这些方法将直接在对象/字符串上为您提供json序列化/反序列化。