List<string>
をデシリアライズしようとしています。実際には、オブジェクトがシリアル化されたList<myClass>
です。例:JSONのシリアル化されたオブジェクトのJSONリストを逆シリアル化する
static void Main(string[] args)
{
List<MyThirdClass> myThirdClass = new List<MyThirdClass>(new[] { new MyThirdClass { RoleId = 123, RoleName = "123" }, new MyThirdClass { RoleId = 234, RoleName = "234" } });
List<MySecondSerializedClass> mySecondSerializedClass = new List<MySecondSerializedClass>();
foreach (MyThirdClass thirdClass in myThirdClass)
{
MySecondSerializedClass secondClass = new MySecondSerializedClass { Roles = new List<string>() };
foreach (MyThirdClass tClass in myThirdClass)
{
secondClass.Roles.Add(JsonConvert.SerializeObject(tClass));
}
mySecondSerializedClass.Add(secondClass);
}
MyFirstSerializedClass firstClass = new MyFirstSerializedClass
{
Id = 1,
Name = "1",
Roles = mySecondSerializedClass
};
string serializedFirstClass = JsonConvert.SerializeObject(firstClass, Formatting.Indented);
MyFirstNonSerializedClass nonSerializedFirstClass = JsonConvert.DeserializeObject<MyFirstNonSerializedClass>(serializedFirstClass);
}
public class MyFirstSerializedClass
{
public int Id { get; set; }
public string Name { get; set; }
public List<MySecondSerializedClass> Roles { get; set; }
}
public class MyFirstNonSerializedClass
{
public int Id { get; set; }
public string Name { get; set; }
public List<MySecondNonSerializedClass> Roles { get; set; }
}
public class MySecondSerializedClass
{
public List<string> Roles { get; set; }
}
public class MySecondNonSerializedClass
{
public List<MyThirdClass> Roles { get; set; }
}
public class MyThirdClass
{
public int RoleId { get; set; }
public string RoleName { get; set; }
}
serializedFirstClass
このようなJSONを返す:
{
"Id": 1,
"Name": "1",
"Roles": [
{
"Roles": [
"{\"RoleId\":123,\"RoleName\":\"123\"}",
"{\"RoleId\":234,\"RoleName\":\"234\"}"
]
},
{
"Roles": [
"{\"RoleId\":123,\"RoleName\":\"123\"}",
"{\"RoleId\":234,\"RoleName\":\"234\"}"
]
}
]
}
デシリアライズは、メッセージと例外をスローしようとしている:値を変換
エラー "{" RoleId ":123、" RoleName ":" 123 "}"を入力して 'ConsoleApplication1.Program + MyThirdClass'と入力します。パスの役割[0] .Roles [0] '、7行目、位置47
は私が間違っているの何かまたは再帰的MyFirstNonSerializedClassにMyFirstSerializedClassをデシリアライズする方法はありますか?
なぜ内部ロールの間に外部ロールがエスケープされないのですか? – abatishchev
@abatishchev私は文字列としてロールをシリアライズしてからそれらを再直列化するためだと思います –
リストとしてMySecondNonSerializedClassのロールを宣言します –
abatishchev