一尘不染

将JSON转换为asp.net中的.Net对象时出错

json

我无法将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”。遇到“无”,名称为“,名称空间”。


阅读 257

收藏
2020-07-27

共1个答案

一尘不染

我建议不要使用 内置的 轻量级 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序列化/反序列化。

2020-07-27