Vin*_*lla 36 javascript c# asp.net json
我无法在asp.net中将JSON字符串转换为.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"}]]
Run Code Online (Sandbox Code Playgroud)
.Net对象
public class JsonFeaturedOffer
{
public string OfferId { get; set; }
public string OrderValue { get; set; }
public string HostingTypeID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
代码隐藏文件中的Converstion代码
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;
Run Code Online (Sandbox Code Playgroud)
转换时我遇到以下错误:
期望来自命名空间''的元素'root'.遇到'无',名称为'',名称空间''.
Pio*_*myd 77
不幸的是,所提出的解决方案都没有解决问题的真正根源.此异常意味着您的反序列化程序尝试从流的末尾读取.
解决方案是将流回放到开头,即.stream.Position = 0;在反序列化之前设置.
此外,正如评论所提到的,如果您使用StreamWriter,则需要在使用流之前将其刷新.
ntz*_*lis 34
我不建议手动执行此操作,而是建议使用内置的轻量级JavaScriptSerializer.要序列化/反序列化的类不需要任何属性.
它也比DataContractJsonSerializer 更灵活,更快,因为它不需要关心所有wcf的东西.此外,它具有通用重载,使其使用非常简单,它也可以处理匿名类型.
连载:
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var objectAsJsonString = serializer.Serialize(objectToSerialize);
Run Code Online (Sandbox Code Playgroud)
反序列化:
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
JsonFeaturedOffer deserializedObject = serializer.Deserialize<JsonFeaturedOffer>(s_JsonBaseDate);
Run Code Online (Sandbox Code Playgroud)
为了使它更容易,您可以创建Extension方法,直接在对象/字符串上提供json序列化/反序列化.
| 归档时间: |
|
| 查看次数: |
31782 次 |
| 最近记录: |