我在项目嵌入式资源中添加了一个Json文件。 我想读取这个文件,其中包含某个对象的列表并反序列化它。
我有以下Json文件:
[
{
"Status": 21,
"CustomerId": "e3633ccb-bbea-465d-9ce6-6c37e9c40e2e"
},
{
"Status": 20,
"CustomerId": "d02e2970-7c28-41b0-89f3-5276a97e12c9"
}
]
以下型号:
public class CustomerStatus
{
public int Status { get; set; }
public string CustomerId { get; set; }
}
当我从资源中读取jSon文件时,它自动以字节数组的形式出现,当我将其转换为字符串时,它有\ r \ n和\ t \ .t。 在我的代码中我有以下行来实现这一点,但它失败了:
var string customerdata = System.Text.Encoding.UTF8.GetString(myResources.CustomerStatus);
var data = JsonConvert.DeserializeObject<List<CustomerStatus>>(customerdata);
我收到此错误: 抛出了类型&#39; Newtonsoft.Json.JsonReaderException&#39;消息&#34;解析值时遇到意外的字符:。路径&#39;&#39;,第0行,第0位。&#34;
更新
以下行也会产生同样的问题:
var string customerdata = System.Text.Encoding.UTF8.GetString(myResources.CustomerStatus);
.Replace("\r\n", " ")
.Replace("\t", " ");
答案 0 :(得分:1)
尝试使用Net Library方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Script.Serialization;
namespace ConsoleApplication16
{
class Program
{
static void Main(string[] args)
{
string customerdata =
"[" +
"{" +
"\"Status\": 21," +
"\"CustomerId\": \"e3633ccb-bbea-465d-9ce6-6c37e9c40e2e\"" +
"}," +
"{" +
"\"Status\": 20," +
"\"CustomerId\": \"d02e2970-7c28-41b0-89f3-5276a97e12c9\"" +
"}" +
"]";
JavaScriptSerializer ser = new JavaScriptSerializer();
var r = ser.Deserialize<List<CustomerStatus>>(customerdata);
}
}
public class CustomerStatus
{
public int Status { get; set; }
public string CustomerId { get; set; }
}
}
答案 1 :(得分:1)
这似乎是文件的编码问题。您可以使用Notepad ++转换文件,也可以使用记事本打开JSON文件,并使用另存为选择ANSI作为编码。然后在资源中再次删除并添加文件并切换
System.Text.Encoding.UTF8.GetString(myResources.CustomerStatus)
到
System.Text.Encoding.ASCII.GetString(myResources.CustomerStatus)
如果您热衷于使用UTF8,请使用Notepad ++转换文件。
答案 2 :(得分:0)
尝试以下嵌入式资源方法:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
namespace StackOverflowTests {
class Program {
static void Main(string[] args) {
var assembly = Assembly.GetExecutingAssembly();
var resource = "StackOverflowTests.StatusCustomer.json";
var deserializedResource = GetEmbeddedResource<List<CustomerStatus>>(assembly, resource);
Console.WriteLine(JsonConvert.SerializeObject(deserializedResource));
Console.ReadKey();
}
private static T GetEmbeddedResource<T>(Assembly assembly, string resource) {
using (Stream manifestStream = assembly.GetManifestResourceStream(resource))
using (StreamReader reader = new StreamReader(manifestStream)) {
string result = reader.ReadToEnd();
return JsonConvert.DeserializeObject<T>(result);
}
}
public class CustomerStatus {
public int Status { get; set; }
public string CustomerId { get; set; }
}
}
}
如果您无法使用所描述的方法,请在
之后发布序列化字符串System.Text.Encoding.UTF8.GetString(myResources.CustomerStatus)
打电话,所以我可以看出出了什么问题。